std::map
はキーと値をペアで管理する連想配列です。
この記事では、初心者でもわかりやすくstd::map
の使い方について解説します。
std::mapとは
std::map
は、C++のSTL(Standard Template Library)に含まれるコンテナクラスの一つです。
キーと値をペアで保持することができ、キーを使って値を検索することができます。
例えば、以下のようなコードでstd::mapを宣言し、要素を追加することができます。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> myMap;
// 要素の追加
myMap["apple"] = 100;
myMap["banana"] = 200;
myMap["orange"] = 300;
// 要素の取得
std::cout << "apple: " << myMap["apple"] << std::endl; // 出力結果:apple: 100
std::cout << "banana: " << myMap["banana"] << std::endl; // 出力結果:banana: 200
std::cout << "orange: " << myMap["orange"] << std::endl; // 出力結果:orange: 300
return 0;
}
apple: 100
banana: 200
orange: 300
この例では、std::string型のキーとint型の値を持つstd::mapオブジェクトを宣言しています。
その後、[]演算子を使って要素を追加し、同じ演算子を使って要素を取得しています。
また、std::mapは自動的にキーに対して昇順ソートされます。これにより、キーに対して二分探索が可能になります。
std::mapの基本的な使い方
std::mapは、C++のSTL(Standard Template Library)に含まれるコンテナであり、キーと値をペアで格納することができます。この記事では、std::mapの基本的な使い方について解説します。
要素の追加
std::mapに要素を追加するには、insert()
メソッドを使用します。以下は、int型のキーとstring型の値を持つstd::mapに要素を追加する例です。
#include <iostream>
#include <map>
int main()
{
std::map<int, std::string> myMap;
// 要素の追加
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
myMap.insert(std::make_pair(3, "orange"));
return 0;
}
上記の例では、insert()メソッドを使用して3つの要素を追加しています。
make_pair()
関数は、引数として渡された2つの値からstd::pair
オブジェクトを作成し、それをinsert()
メソッドに渡すことで要素を追加しています。
要素の取得
std::map
では、キーに対応する値を取得する方法がいくつかあります。
at()関数を使用する方法
std::map
のat()
関数を使用すると、指定されたキーに対応する値を取得できます。例えば、以下のように記述します。
#include<iostream>
#include<map>
int main() {
std::map<std::string, int> mymap = { {"apple", 10}, {"orange", 20}, {"banana", 30} };
int value = mymap.at("apple");
std::cout << value;
return 0;
}
10
- []演算子を使用する方法
std::map
の[]
演算子を使用すると、指定されたキーに対応する値を取得できます。例えば、以下のように記述します。
#include<iostream>
#include<map>
int main() {
std::map<std::string, int> mymap = { {"apple", 10}, {"orange", 20}, {"banana", 30} };
int value = mymap["apple"];
std::cout << value;
return 0;
}
10
配列であれば、mymap[1]
のようにインデックスを指定しますが、std::map
ではキー名を指定することでそのキーが指す値を取得できます(キーがdouble型だとmymap[3.14]
というように指定することも可能です)。
要素の削除
std::map
から要素を削除するには、erase()
メソッドを使用します。以下は、先ほど作成したmyMap
からキーが2の要素を削除する例です。
#include <iostream>
#include <map>
int main()
{
std::map<int, std::string> myMap;
// 要素の追加
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
myMap.insert(std::make_pair(3, "orange"));
// 要素の削除
myMap.erase(2);
return 0;
}
上記の例では、erase()メソッドに削除したいキー(ここでは2)を渡すことで、そのキーに対応する要素が削除されます。
要素の検索
std::map
から特定のキーに対応する値を取得する場合は、find()
メソッドまたは[]
演算子を使用します。
以下は、先ほど作成したmyMapからキーが1の値(“apple”)を取得する例です。
#include <iostream>
#include <map>
int main()
{
std::map<int, std::string> myMap;
// 要素の追加
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
myMap.insert(std::make_pair(3, "orange"));
// キーが1に対応する値("apple")を取得
auto it = myMap.find(1);
if (it != myMap.end()) {
std::cout << it->second << std::endl; // 出力:apple
}
// []演算子でも同じ結果が得られる
std::cout << myMap[1] << std::endl; // 出力:apple
return 0;
}
apple
apple
上記の例では、find()メソッドでキーが1に対応するイテレータ(ポインタ)it を取得し、->
演算子でイテレータが指すペアオブジェクト({1,”apple”}) のsecond(value)部分、[]
演算子でも同じ結果が得られます。