1

我有一对和一张这样声明的地图

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

4 回答 4

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

当然你可以使用

auto it = ...;

或者

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

在 C++11 中。

于 2012-10-22T14:42:00.917 回答
4

你需要

Map::iterator it = ....

或者,在 C++11 中,

auto it = pair_map.find(make_pair(string1, string2));
于 2012-10-22T14:42:01.307 回答
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。

于 2012-10-22T14:44:06.413 回答
1

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

pair_map<Key, double>::iterator it;

利用

Map::iterator it;

或者

map<Key, double>::iterator it;

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

于 2012-10-22T14:42:58.263 回答