映射<int,int>的*迭代器是什么?不是pair <int,int>

时间:2019-09-04 11:57:08

标签: c++ dictionary find

我正在测试STL查找算法。我到达了地图容器。但是,地图有其自己的方法(map_name.find(key))。即使这样,如果提供一对作为查找元素,则通用查找功能也应该起作用。但这不起作用。

我尝试在地图上找到一对元素,但这是行不通的。我试图找到一个*迭代器,它可以工作。所以...这意味着* iterator不是一对?!

map<int,int> m = {{0,1}, {1,2}, {2,3}};
map<int,int>::iterator it;
pair<int,int> p = make_pair(0,1);
//this returns compilation error
//it = find(m.begin(), m.end(), p);
//this works fine
it = find(m.begin(), m.end(), *m.begin());
cout << it->first << ' ' << it->second << endl; //prints 0 1

在两种情况下我都期望0 1,但是似乎被映射的map :: iterator不是一对。比什么?

1 个答案:

答案 0 :(得分:3)

知道了。 *迭代器是

pair<const int, int>

而不是

par<int,int>

因为键元素在映射中必须为const。现在可以了。