今天早上我正在写一个算法,我遇到了一个奇怪的情况。我有两个std::map
s。我想对每个键的集合执行集合交集(以查找两个映射共有的键)。在未来的某个时候,我想我很可能也想在这里执行集合减法。幸运的是,STL 包含这两种操作的功能。问题是,我似乎无法std::set
从std::map
. 有没有办法做到这一点?我正在寻找这样简单的东西,就像在 Java 中一样:
std::set<Foo> keys = myMap.getKeySet();
我的理解是,我不能std::set_intersection()
直接在映射中的迭代器上使用该函数,因为映射公开std::pair
对象而不仅仅是键。另外,我认为地图不能保证秩序。我也有兴趣在一对std::multimap
s 上执行相同的操作,如果这有什么不同的话。
编辑:我最初忘了提到,由于我被迫使用的编译器的年龄(MSVC++ 6),大多数在 boost 中可用的漂亮模板技巧都不能使用。