如何获得 std::map 的 std::set 键

新手上路,请多包涵

今天早上我正在写一个算法,我遇到了一个奇怪的情况。我有两个 std::map s。我想对每个键的集合执行集合交集(以查找两个映射共有的键)。在未来的某个时候,我想我很可能也想在这里执行集合减法。幸运的是,STL 包含这两种操作的功能。问题是,我似乎无法从 — 中获得 — std::map std::set 的键。有没有办法做到这一点?我正在寻找这样简单的东西,就像在 Java 中一样:

 std::set<Foo> keys = myMap.getKeySet();

我的理解是,我不能直接在映射中的迭代器上使用 std::set_intersection() 函数,因为映射暴露 std::pair 对象而不仅仅是键。另外,我认为地图不能保证秩序。我也有兴趣在一对 std::multimap 上执行相同的操作,如果这有什么不同的话。

编辑:我最初忘了提到,由于我被迫使用的编译器的年龄(MSVC++ 6),大多数在 boost 中可用的漂亮模板技巧都不能使用。

原文由 rmeador 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

正如 MSalters 所说,您可能只想创建一组密钥。这对于小地图来说可能已经足够了。

一个快速的方法是:

 std::set<Foo> keys;
for (auto &iter : myMap)
{
   keys.insert(iter.first);
}

原文由 Joe Iddon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题