今天早上我正在写一个算法,我遇到了一个奇怪的情况。我有两个 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 许可协议
您可以使用通用的 boost::transform_iterator 返回一个仅返回键(而不是值)的迭代器。请参阅 如何从 std::map 检索所有键(或值)并将它们放入向量中?