使用带有一对的map作为c ++迭代器问题的关键

时间:2012-10-22 14:39:43

标签: c++ c++11

我有一对和一张声明为

的地图
typedef pair<string,string> Key;
typedef map< Key, double> Map;

我通过for循环将对象插入到它们中

Key p (string1, string2 );
pair_map.insert(make_pair( p, double1 ) );

我怎样才能在地图中找到元素?我在使用find设置迭代器时遇到问题。

假设我正在使用it = pair_map.find(make_pair(string1,string2));

我已尝试声明pair_map<Key, double>::iterator it;map<Key, double>::iterator it;,但两者都不适合我。我该如何解决这个问题?

由于typedef的

,我得到的错误都是长期无效的转换错误

4 个答案:

答案 0 :(得分:6)

Map::iterator it = pair_map.find(make_pair(string1, string2));

当然你可以使用

auto it = ...;

decltype(pair_map.begin()) it = ...;

在C ++ 11中。

答案 1 :(得分:4)

你需要

Map::iterator it = ....

或者,在C ++ 11中,

auto it = pair_map.find(make_pair(string1, string2));

答案 2 :(得分:2)

pair_map变量的名称,而不是类型

Map::iterator it = pair_map.find(make_pair(string1,string2));

(正如juanchopanza所说)将会起作用,

std::map<Key, double>::iterator it = pair_map.find(make_pair(string1,string2));

auto it = pair_map.find(make_pair(string1,string2));

如果你有C ++ 11。

答案 3 :(得分:1)

不要将变量名称用于迭代器类型,而是使用类型名称,例如而不是:

pair_map<Key, double>::iterator it;

使用

Map::iterator it;

或者

map<Key, double>::iterator it;

实际上,你不应该输入你map,因为它令人困惑。只需在任何地方使用该模板。