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

qdi*_*dii 0 c++ iterator stdmap standard-library c++03

我在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)

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

Joh*_*nck 5

是的,这是一个愚蠢的缺点.但它很容易纠正:你可以编写自己的通用key_iterator类,它可以从map(pair)迭代器构造.我已经完成了它,它只有几行代码,然后制作value_iterator也是微不足道的.