割り当てに 2 つのキーを持つマップを使用する予定です。そして、次のようにマップを作成します。
map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;
map.find() と map.insert() を使用してマップ内の既存のエントリを検索する方法、または 2 つのキーの組み合わせが新しい場合に新しい値を挿入する方法に苦労しました。誰かが例を挙げることができますか?
キーのペアを作成する必要があることを除いて、マップと同じである必要があります。
入れる :
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;
}
マップで文字列をキーとして使用すると、パフォーマンスの問題が発生する可能性があることに注意してください。また、ペアの文字列の順序にも意味があります。
Boost multiIndexをご覧ください。
it = myMap.find(make_pair("hi","mike"));
insert
最初のコンポーネントもペアであるペアを挿入しているため、少し厄介です。
myMap.insert(make_pair( make_pair("hi","john"), 4 ) );
これは機能します:
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"));
insert
emplace
コードを短縮するために、C++11 で次のように置き換えることができます。
myMap.emplace(key_type("a","b"),1);