【C++】std::mapの使い方について詳しく解説

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は自動的にキーに対して昇順ソートされます。これにより、キーに対して2分探索が可能になります。

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::mapat()関数を使用すると、指定されたキーに対応する値を取得できます。例えば、以下のように記述します。

#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
  1. []演算子を使用する方法

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)部分、[]演算子でも同じ結果が得られます。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す