std :: set_difference是可能比较集和映射密钥? [英] std::set_difference is it possible to compare set and map Keys?

查看:207
本文介绍了std :: set_difference是可能比较集和映射密钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我们得到一组新的字符串,我们有一个作为地图键。我们要做单向 set_difference(注意 - 不是set_symmetric_difference)。所以目前我有这样的丑陋的代码,如:

So we get a new set of strings, and we have one as map Keys. And we want to do one way set_difference (note - not set_symmetric_difference). So currently I have such ugly code like:

    std::map<std::string, boost::shared_ptr<some_class> > _ds;
std::set<std::string> compare_and_clean(std::set<std::string> &new_)
{
    std::set<std::string> result;
    std::set<std::string> old;

    for (std::map<std::string, std::string>::iterator mi = _ds.begin(); mi != _ds.end(); ++mi)
        old.insert(mi->first);

    std::set_difference( old.begin(), old.end(), new_.begin(), new_.end(), inserter(result, result.begin()));

    for (std::set<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
        _ds.erase(*i);
    }
    return result;
}



我不知道如何做set_difference在映射键和设置更干净的方式?

I wonder how to do set_difference over map Keys and set in more clean way?

推荐答案

是:您可以遍历 std :: map 使用一个变换迭代器。

Yes: You can iterate over just the keys of the std::map using a transform iterator.

你可以在我提供给另一个问题的答案

这篇关于std :: set_difference是可能比较集和映射密钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆