从c ++中的三元素映射中提取第二个元素

时间:2018-05-26 13:45:04

标签: c++

我正在创建一张地图。地图工作正常。我需要提取特定索引的字符(用于另一个计算)。 地图代码如下:

//site index, val type, num of val
typedef map<int, pair<char, int> > Maptype;

Maptype my_map;
for (i=0; i<SIZE; i++){ //create the system 
    char Type = 's';
    int Count = 10;
    //insert to map
    my_map.insert( make_pair( i, make_pair(Type, i*Count)));
}

现在,我正在尝试提取特定索引的字符。如果我有两个元素,我可以使用下面的元素。但有三个要素,我无法找到解决方案。请帮助:)

for(auto &i: my_map)  
  cout << i.second << endl;

2 个答案:

答案 0 :(得分:4)

使用my_mapauto进行迭代可获得键值对。在您的情况下,密钥为int,值为另一个std::pair

i.second是键值对的值,因此它也是std::pair,只需执行i.second.first即可获得Type和{{1}的值} i.second.second

您可能需要考虑在此处使用i*Count,因为您似乎没有修改任何内容并且不打算这样做。此外,const auto &i刷新流缓冲区,如果在循环中完成,则可能会很昂贵。只需使用std::endl

答案 1 :(得分:3)

i.second将在您的循环中为pair<char, int>&类型。

因此,要访问整数,只需使用cout << i.second.second << endl;