C++ std::mapでstd::pairをキーとして検索するサンプルコード
C++ std::map で std::pair をキーとして検索する
このチュートリアルでは、std::pair
をキーとして std::map
を検索する方法について説明します。
コード例
#include <iostream>
#include <map>
using namespace std;
int main() {
// キーと値のペアを格納する map を作成
map<pair<int, int>, string> my_map;
// map に要素を追加
my_map[{1, 2}] = "Hello";
my_map[{3, 4}] = "World";
// pair をキーとして検索
auto it = my_map.find({1, 2});
// 検索結果が見つかった場合は値を出力
if (it != my_map.end()) {
cout << it->second << endl;
} else {
cout << "キーが見つかりません" << endl;
}
return 0;
}
コード解説
#include <iostream>
と#include <map>
で必要なヘッダーファイルをインクルードします。using namespace std;
でstd
名前空間を使用します。map<pair<int, int>, string> my_map;
でstd::pair
をキー、std::string
を値とするstd::map
を作成します。my_map[{1, 2}] = "Hello";
とmy_map[{3, 4}] = "World";
でstd::pair
をキーとしてstd::map
に要素を追加します。auto it = my_map.find({1, 2});
でstd::pair
をキーとしてstd::map
を検索します。if (it != my_map.end()) {
で検索結果が見つかったかどうかをチェックします。cout << it->second << endl;
で検索結果が見つかった場合は値を出力します。else {
で検索結果が見つからなかった場合は "キーが見つかりません" と出力します。
std::map
には、find()
以外にもcount()
やlower_bound()
などの検索関数があります。std::pair
以外にも、任意の型をキーとしてstd::map
を使用できます。
#include <iostream>
#include <map>
using namespace std;
int main() {
// キーと値のペアを格納する map を作成
map<pair<int, int>, string> my_map;
// map に要素を追加
my_map[{1, 2}] = "Hello";
my_map[{3, 4}] = "World";
// pair をキーとして検索
auto it = my_map.find({1, 2});
// 検索結果が見つかった場合は値を出力
if (it != my_map.end()) {
cout << it->second << endl;
} else {
cout << "キーが見つかりません" << endl;
}
return 0;
}
このコードを実行すると、以下の出力が得られます。
Hello
std::find_if を使用する
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
int main() {
// キーと値のペアを格納する map を作成
map<pair<int, int>, string> my_map;
// map に要素を追加
my_map[{1, 2}] = "Hello";
my_map[{3, 4}] = "World";
// 検索する pair
pair<int, int> key = {1, 2};
// find_if を使用して map 内の要素を検索
auto it = find_if(my_map.begin(), my_map.end(), [&key](const auto& p) {
return p.first == key;
});
// 検索結果が見つかった場合は値を出力
if (it != my_map.end()) {
cout << it->second << endl;
} else {
cout << "キーが見つかりません" << endl;
}
return 0;
}
このコードは、std::find_if
を使用して std::map
内の std::pair
を検索します。
std::find_if
は、ラムダ式を使用して要素を比較します。ラムダ式は、p.first
と key
が等しいかどうかをチェックします。
std::equal_range を使用する
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
int main() {
// キーと値のペアを格納する map を作成
map<pair<int, int>, string> my_map;
// map に要素を追加
my_map[{1, 2}] = "Hello";
my_map[{3, 4}] = "World";
// 検索する pair
pair<int, int> key = {1, 2};
// equal_range を使用して map 内の要素を検索
auto range = equal_range(my_map.begin(), my_map.end(), key);
// 検索結果が見つかった場合は値を出力
if (range.first != range.second) {
cout << range.first->second << endl;
} else {
cout << "キーが見つかりません" << endl;
}
return 0;
}
std::equal_range
は、範囲内の要素と key
を比較します。
カスタム比較関数を使用する
#include <iostream>
#include <map>
using namespace std;
struct Compare {
bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) const {
return lhs.first < rhs.first;
}
};
int main() {
// キーと値のペアを格納する map を作成
map<pair<int, int>, string, Compare> my_map;
// map に要素を追加
my_map[{1, 2}] = "Hello";
my_map[{3, 4}] = "World";
// 検索する pair
pair<int, int> key = {1, 2};
// カスタム比較関数を使用して map 内の要素を検索
auto it = my_map.find(key);
// 検索結果が見つかった場合は値を出力
if (it != my_map.end()) {
cout << it->second << endl;
} else {
cout << "キーが見つかりません" << endl;
}
return 0;
}
カスタム比較関数は、pair
の最初の要素を比較します。
c++ std stdmap