从`map`中删除不在`set`中的元素

时间:2014-06-05 09:25:12

标签: c++ c++11 stdmap stl-algorithm

std::map<std::string, Obj> myMap;
std::set<std::string> mySet;

我想从myMap删除哪些密钥不在mySet中。

我该怎么办?我找到了std::remove_if算法,但似乎不适用于此。

1 个答案:

答案 0 :(得分:6)

我从这个简单的方法开始:

for (auto it = myMap.begin(); it != myMap.end(); )
{
    if (mySet.find(it->first) == mySet.end()) { myMap.erase(it++); }
    else                                      { ++it;              }
}

如果你想要更高效的东西,你可以在锁步中迭代这两个容器并进行按键比较以利用兼容的元素顺序。另一方面,本算法甚至可以在无序容器上工作,并且鉴于您的密钥是字符串,无序容器可能具有更好的性能。