std::map<std::string, Obj> myMap;
std::set<std::string> mySet;
我想从myMap
删除哪些密钥不在mySet
中。
我该怎么办?我找到了std::remove_if
算法,但似乎不适用于此。
答案 0 :(得分:6)
我从这个简单的方法开始:
for (auto it = myMap.begin(); it != myMap.end(); )
{
if (mySet.find(it->first) == mySet.end()) { myMap.erase(it++); }
else { ++it; }
}
如果你想要更高效的东西,你可以在锁步中迭代这两个容器并进行按键比较以利用兼容的元素顺序。另一方面,本算法甚至可以在无序容器上工作,并且鉴于您的密钥是字符串,无序容器可能具有更好的性能。