C++ で std::map::find 関数を使用する
この記事では、C++ で std::map::find
関数とその代替機能を利用する方法について説明します。
C++ で std::map::find
関数を使用して指定されたキー値を持つ要素を検索する
std::map
オブジェクトは、C++ 標準テンプレートライブラリの連想コンテナの 1つであり、キー値を格納するソートされたデータ構造を実装します。キーは std::map
コンテナ内で一意であることに注意してください。したがって、既存のキーを使用して新しい要素を挿入した場合、操作は効果がありません。それでも、std::map
クラスの一部の特別なメンバー関数は、キーが一致する場合、既存のペアに新しい値を割り当てることができます(例:insert_or_assign
関数)。
std::map
コンテナの利点には、対数時間で実行できる高速な検索、挿入、および削除操作が含まれます。検索操作は、キーへの参照を受け入れる find
メンバーによって提供されます。指定されたキーが std::map
オブジェクトで見つかった場合、対応する要素へのイテレータが返されます。一方、指定されたキーがコンテナ内に見つからないとすると、過去のイテレータ(map::end()
)が返されます。
次のコードスニペットは、string
ペアの map
コンテナが任意の値で初期化され、次に"h"
値を持つキーが検索される単純な使用シナリオを示しています。したがって、返されたイテレータを if-else
ステートメントで処理して、要素ペアを出力するか、指定されたキーが見つからなかったというメッセージを出力します。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
auto item = m1.find(key);
if (item != m1.end()) {
cout << "Key exists! - {" << item->first << ";" << item->second << "}\n";
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
出力:
Key exists! - {h;htop}
contains
メンバー関数を使用して、指定された要素が C++ のマップに存在するかどうかを確認する
指定された値のペアが map
オブジェクトに存在するかどうかをユーザーが確認する必要がある場合は、メンバー関数 contains
を利用できます。この関数は、C++ 20 バージョンから std::map
コンテナの一部であるため、次のコードスニペットを実行するにはコンパイラのバージョンを知っている必要があります。contains
関数はキーへの参照を取得し、見つかった場合は bool
値 true
を返します。このメンバー関数の時間計算量も対数です。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
if (m1.contains(key)) {
cout << "Key Exists!" << endl;
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
出力:
Key Exists!
または、cout
メンバー関数を使用して、指定されたキーを持つ要素ペアが map
に存在するかどうかを確認することもできます。通常、cout
関数は、指定されたキーを持つ要素の数を取得するために使用されますが、std::map
は一意のキー値のみを格納するため、要素が見つかった場合、プロセスは 1
を返します。それ以外の場合は、要素が見つからなかったことを示すゼロ値が返されます。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
if (m1.count(key)) {
cout << "Key Exists!" << endl;
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
出力:
Key Exists!