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;

map実際には、混乱を招くため、typedefを使用しないでください。どこでもテンプレートを使用するだけです。

于 2012-10-22T14:42:58.263 に答える