我目前正在学习STL中的地图。我想知道如何从地图上获取特定的键值对。例如,下面地图中的第三个键值对。 'C'-> 1
'A'-> 1
'B'-> 1
'C'-> 1
'D'-> 1
'E'-> 2
答案 0 :(得分:6)
是的,我们可以访问地图的“第三个键值对”,但这不是很简单。我们需要在地图的开头获得一个迭代器,然后将其前进两次(请注意,在更通用的代码中,您应先检查地图是否具有适当的大小,然后再执行类似的操作)
std::map<char, int> my_map;
my_map['C'] = 3;
my_map['A'] = 1;
my_map['B'] = 2;
auto begin = my_map.begin();
std::advance(begin, 2);
std::cout << begin->first << " : " << begin->second << std::endl;
输出:
C:3
请注意,第3个元素实际上是我们插入的第一个键值对。这是因为键是按顺序插入的。
答案 1 :(得分:1)
如果我对您的理解正确,则需要类似
#include <iostream>
#include <map>
#include <iterator>
int main()
{
std::map<char, unsigned int> m =
{
{ 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
};
auto it = std::next( std::begin( m ), std::min<decltype( m )::size_type>( m.size(), 2 ) );
if ( it != std::end( m ) )
{
std::cout << it->first << ": " << it->second << '\n';
}
return 0;
}
程序输出为
C: 1
也就是说,您可以将操作与迭代器一起使用。
例如,也许您只需要使用类的方法find
#include <iostream>
#include <map>
#include <iterator>
int main()
{
std::map<char, unsigned int> m =
{
{ 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
};
auto it = m.find( 'C' );
if ( it != std::end( m ) )
{
std::cout << it->first << ": " << it->second << '\n';
}
return 0;
}
再次显示程序输出是
C: 1