如何访问地图的ith成员?

时间:2017-03-04 12:48:13

标签: c++

我想访问mapc++的任何成员。 就像我有一个map = {(4,3), (5,6), (9,8)}
并说我想获得这张地图的第二个成员。我试过了

map<int, int>::iterator it = mpp.begin();
cout << (it+1)->first << " " << (it+1)->second << endl;

我没有取得任何成功。请帮帮我。

2 个答案:

答案 0 :(得分:0)

我宁愿应用一个简单的方法。 假设我必须从乞讨中获取jth元素。

map<int, int>::iterator it = mpp.begin();
while(j--)
          it++;
cout << it->first << " " << it -> second << endl;

答案 1 :(得分:0)

只有随机访问迭代器才有operator+operator-的重载。双向迭代器(例如std::map::iterator)不会。然而,可以使用std::next(因为C ++ 11)线性地推进

  

返回迭代器的第n个后继者。

std::advance

  

给定n个元素迭代的增量。

PS。注意,找到std::map的第n个元素的复杂性具有线性复杂性。还有其他类似的数据结构提供std::map具有的功能,但也允许更快的第n个成员查找。因此,替代数据结构可能更适合您的用例。

例如,可以使用每个子树的大小来扩充二叉搜索树。这种结构称为顺序统计树。对于内存开销的小线性增加,它为查找第n个元素提供了O(log n)复杂度。