std::map<std::string, Obj> myMap;
std::set<std::string> mySet;
我想从 myMap
中删除那些键不在 mySet
中的键。
我该怎么做?我找到了std::remove_if
算法,但它似乎不适用于这里。
最佳答案
我将从这种简单的方法开始:
for (auto it = myMap.begin(); it != myMap.end(); )
{
if (mySet.find(it->first) == mySet.end()) { myMap.erase(it++); }
else { ++it; }
}
如果您想要更高效的东西,您可以同步迭代两个容器并进行键式比较以利用兼容的元素顺序。另一方面,本算法甚至适用于无序容器,并且假设您的键是字符串,无序容器无论如何都可能具有更好的性能。
关于c++ - 从 `map` 中删除不在 `set` 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056399/