連想配列とは、それぞれの値を名前(キー
)によって管理する配列のことです。
開発では、値ごとに意味をつけ、名前で値を引き出したい場面などで使用されます。
今回は、C++
の標準ライブラリの連想配列の使用方法について簡単に紹介します。
std::mapとstd::unordered_mapの違い
C++
には、よく似た機能の連想配列クラスのstd::map
とstd::unordered_map
があります。
特徴を抑えて場面によって使い分けを行うと良いでしょう。
std::map
std::map
は、順序を持つ連想配列です。
ソートや範囲検索が必要な場合は、こちらを使用します。
std::unordered_map
std::unordered_map
は、ハッシュテーブルで値を管理する連想配列です。
std::map
に比べて要素の検索が高速であったり、メモリの仕様が効率的などのメリットがあります。
ハッシュ管理のため、ハッシュ値が衝突する可能性はがあるものの、確率はかなり低いです。
主にキー名から検索を行う場合や、順序が必要のない場合はこちらを使用することが多いです。
使用方法
std::map
とstd::unordered_map
の使用方法は、ツリーやハッシュなどの構造に関しての関数以外はほとんど同じです。
本記事ではstd::unordered_map
を使用して、値の挿入と検索法を記述します。
尚、std::map
とstd::unordered_map
はテンプレートコンテナであるため、コンテナの機能を使用することが出来ますが、本記事では省きます。
宣言
宣言では、第一テンプレート引数にキーの型、第二テンプレート引数に値の型を指定します。
//キー名:std::string
//値:int
std::unordered_map<std::string, int> umap;
値の追加と要素の検索
operator[]
を使用してキー名を指定し、それに値を代入することで追加が出来ます。
また、operator[]
に値の入ったキー名を指定することで、要素を検索できます。
#include <iostream>
#include <string>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> umap;//宣言
umap["val1"] = 1; // キー "val1" に値 1 を追加
printf_s("val1 : %d\n",umap["val1"]);
system("pause");
return 0;
}
val1 : 1
続行するには何かキーを押してください . . .
総括
-
std::map
やstd::unordered_map
を使用することで、C++
で連想配列を使用することが可能。 -
std::map
には順序があり、std::unordered_map
は検索などが高速。 - 宣言では、第一テンプレート引数にキーの型、第二テンプレート引数に値の型を指定する。
- 値の挿入や検索時には
operator[]
を使用することで、直感的に操作が行える。