相关疑难解决方法(0)

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

今天早上我正在写一个算法,我遇到了一个奇怪的情况.我有两个std::map.我想在每个键的各组键上执行一组交集(找到两个键共有的键).在未来的某个时刻,我认为我也可能也希望在这里执行set减法.幸运的是,STL包含了这两种操作的功能.问题是,我似乎无法从中得到一把std::set钥匙std::map.有没有办法做到这一点?我正在寻找一些简单的东西,就像在Java中一样:

std::set<Foo> keys = myMap.getKeySet();
Run Code Online (Sandbox Code Playgroud)

我的理解是我不能std::set_intersection()直接在迭代器上使用函数到地图中,因为地图暴露了std::pair对象而不仅仅是键.此外,我不认为地图保证顺序.我也有兴趣在一对std::multimaps 上执行相同的操作,如果这有任何区别的话.

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

c++ stl map set

34
推荐指数
5
解决办法
4万
查看次数

为什么std :: map没有提供key_iterator和value_iterator?

我在C++ 03环境中工作,并将一个函数应用于地图的每个键是很多代码:

const std::map<X,Y>::const_iterator end = m_map.end();
for (std::map<X,Y>::const_iterator element = m_map.begin(); element != end; ++element)
{
   func( element->first );
}
Run Code Online (Sandbox Code Playgroud)

如果key_iterator存在,相同的代码可以利用std::for_each:

std::for_each( m_map.key_begin(), m_map.key_end(), &func );
Run Code Online (Sandbox Code Playgroud)

那为什么不提供呢?有没有办法让第一种模式适应第二种模式?

c++ iterator stdmap standard-library c++03

0
推荐指数
1
解决办法
316
查看次数

标签 统计

c++ ×2

c++03 ×1

iterator ×1

map ×1

set ×1

standard-library ×1

stdmap ×1

stl ×1