2

割り当てに 2 つのキーを持つマップを使用する予定です。そして、次のようにマップを作成します。

map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;

map.find() と map.insert() を使用してマップ内の既存のエントリを検索する方法、または 2 つのキーの組み合わせが新しい場合に新しい値を挿入する方法に苦労しました。誰かが例を挙げることができますか?

4

4 に答える 4

3

キーのペアを作成する必要があることを除いて、マップと同じである必要があります。

入れる :

map< pair<string,string>, int > mymap; 

pair<string, string> key = make_pair("bob", "sue");
mymap[ key ] = 5; // you can inline make_pair if you prefer.

// or you can use insert method
mymap.insert( key, 5 );

探す :

pair<string, string> key = make_pair("bob", "sue"); 
auto it = mymap.find( key ); // you can inline make_pair if you prefer.
if ( it != mymap.end() )
{
  cout << it->second;
}

マップで文字列をキーとして使用すると、パフォーマンスの問題が発生する可能性があることに注意してください。また、ペアの文字列の順序にも意味があります。

于 2013-10-06T18:53:57.647 に答える
1

Boost multiIndexをご覧ください。

于 2013-10-06T19:09:25.653 に答える
1
it = myMap.find(make_pair("hi","mike"));

insert最初のコンポーネントもペアであるペアを挿入しているため、少し厄介です。

myMap.insert(make_pair( make_pair("hi","john"), 4 ) );
于 2013-10-06T18:47:30.690 に答える
0

これは機能します:

typedef pair<string, string> key_type;
map<key_type, int> myMap;
myMap.insert(std::make_pair(key_type("a","b"),1));
map<pair<string, string>, int>::iterator it;
it = myMap.find(key_type("a","b"));

insertemplaceコードを短縮するために、C++11 で次のように置き換えることができます。

myMap.emplace(key_type("a","b"),1);
于 2013-10-06T18:48:48.923 に答える