C++ で STL マップコンテナを使用する
-
C++ で
std::map
を使用してマップコンテナオブジェクトを宣言する -
C++ で
find
メンバー関数を使用してマップ内の特定の要素を検索する -
C++ で
insert
メンバー関数を使用してマップに要素を格納する -
C++ で
merge
メンバー関数を使用して 2つのマップオブジェクトの要素を結合する
このガイドでは、C++ で STL マップコンテナを使用する方法に関するいくつかの方法を紹介します。
C++ で std::map
を使用してマップコンテナオブジェクトを宣言する
std::map
コンテナは、キーが一意である、ソートされたキーと値のペアのデータ構造を実装します。キー値は、デフォルトでペア要素を昇順で並べ替えます。ただし、ユーザーはオプションで比較関数を std::map
テンプレートに渡すことができます。map
オブジェクトは、各要素が別々の中括弧で指定されている値のリストで初期化できます。この場合、string
ペアのマップを作成し、その要素を cout
ストリームに出力します。各要素は、for
ループの std::pair
メンバーとしてアクセスされることに注意してください。
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
printMap(m1);
return EXIT_SUCCESS;
}
出力:
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
C++ で find
メンバー関数を使用してマップ内の特定の要素を検索する
find
メンバー関数は、map
コンテナで特定のキーと値のペアを検索するのに役立ちます。ルックアップ操作には対数の複雑さがあります。find
関数はキーへの参照を取得し、同等のキーを持つ要素にイテレータを返します。指定されたキーを持つ要素が見つからない場合、過去の終了イテレータが返されます。
次のコードスニペットは、範囲イテレータを使用して新しい map
コンテナを初期化する方法を示しています。最初のイテレータは、find
関数を使用して取得されることに注意してください。また、返されたイテレータの有効性を確認すると便利な場合があります。
#include <cassert>
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m2(m1.find("11700K"), m1.end());
printMap(m2);
auto ret = m1.find("11700K");
assert(ret != m1.end());
std::map<string, string> m3(ret, m1.end());
printMap(m3);
return EXIT_SUCCESS;
}
出力:
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
C++ で insert
メンバー関数を使用してマップに要素を格納する
insert
メンバー関数を使用して、既存の map
コンテナに新しい要素を追加できます。insert
メンバーは、追加するオブジェクトへの参照を取得し、挿入された要素へのイテレータと成功した挿入ステータスを示す bool
値で構成されるコンテナ std::pair
を返します。挿入が失敗すると、イテレータは操作を妨げた要素を指します。
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
auto ret1 = m1.insert({"1390P", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
ret1 = m1.insert({"1390", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
printMap(m1);
return EXIT_SUCCESS;
}
出力:
Not inserted!
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;
C++ で merge
メンバー関数を使用して 2つのマップオブジェクトの要素を結合する
merge
メンバー関数を使用して、2つのマップコンテナの要素を結合できます。これは、結合された要素を格納する必要がある map
オブジェクトから呼び出され、引数として別の map
を取ります。操作後、転送された要素へのすべてのポインタと参照が有効になります。
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m4 = {
{"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};
m1.merge(m4);
printMap(m1);
return EXIT_SUCCESS;
}
出力:
11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;