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

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

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/

相关文章:

c++ - 返回转发引用参数 - 最佳实践

c++ - 根据字符组合拆分字符串/在 `\n`

c++ - 如何使用列表初始化来初始化 `std::map<std::string, CodeInfo>`?

c++ - Dijkstra 算法 w/Adjacency List Map c++

c++ - 内存高效的 std::map 替代方案

c++ - 由于管道损坏,Boost asio 发送消息失败

c++ - boost 线程中的 "too few arguments to function"

c++ - #define 标签的限制范围

c++ - QPieSlice的Qt坐标

c++ - 如何将 enable_if 用于互斥的非成员函数模板?