C++の連想配列とは?std::mapを使ったキーと値の管理方法を解説
連想配列(マップ・辞書)とは
C++における連想配列(associative array)とは、添字(インデックス)に文字型・浮動小数点型・文字列型など、任意のデータ型を使用できる特殊な配列のことです。連想配列は「マップ(map)」や「辞書(dictionary)」とも呼ばれます。
通常の配列ではインデックスが0から始まる整数であるのに対し、連想配列ではインデックスのことを「キー(key)」と呼び、そのキーの位置に格納されたデータを「値(value)」と呼びます。つまり、連想配列は「キーと値のペア(key-value pair)」の集合として定義できます。
連想配列のイメージ
例として、バイクの車種とその最高速度を連想配列で表してみましょう。
車種 最高速度(km/h)
Ninja 290
S1000rr 310
Bullet 127
Duke 135
R1 286
この例では、車種名(string型)が「キー」、最高速度(int型)が「値」に相当します。
C++での実装例
C++では、標準ライブラリのstd::mapを使うことで、連想配列を簡単に実装できます。以下は、バイクの車種と最高速度をマップに格納し、一覧表示と特定キーへのアクセスを行うサンプルコードです。
#include <bits/stdc++.h>
using namespace std;
int main(){
map<string, int> speed{ { "ninja", 290 },
{ "s1000rr", 310 }, { "bullet", 127 },
{ "Duke", 135 }, { "R1", 286 } };
map<string, int>::iterator i;
cout << "The topspeed of bikes are" << endl;
for (i = speed.begin(); i != speed.end(); i++)
cout << i->first << " " << i->second << endl;
cout << endl;
cout << "The top speed of bullet is " << speed["bullet"] << endl;
}
実行結果
The topspeed of bikes are
Duke 135
R1 286
Bullet 127
ninja 290
s1000rr 310
The top speed of bullet is 127
コードのポイント
- map<string, int> speed{...}:キーをstring型、値をint型とするマップを、初期化リストで一括生成しています。
- i->first / i->second:イテレータ経由で要素にアクセスします。firstがキー(車種名)、secondが値(最高速度)を指します。
- speed["bullet"]:添字演算子にキーを指定するだけで、対応する値へ直接アクセスできます。
注意点:キーは自動的にソートされる
実行結果を見ると、要素が挿入した順序ではなく、キーの辞書順(大文字→小文字)でソートされて表示されています。これはstd::mapが内部で赤黒木(平衡二分探索木)を使用し、常にキー順に要素を管理しているためです。ソートが不要で、より高速な平均アクセス時間を求める場合は、ハッシュテーブルベースのstd::unordered_mapを検討するとよいでしょう。
-
JavaScriptの連想配列とは?基本的な仕組みと使い方を解説
JavaScriptにおける「連想配列(Associative Array)」とは、数値のインデックスの代わりに、ユーザーが自由に定義した文字列キーを使って値にアクセスできるデータ構造のことです。厳密に言えば、JavaScriptの連想配列の正体はオブジェクトであり、他の言語にあるような専用の連想配列型は存在しません。 通常の配列と比べると、連想配列には次のような特徴があります。 lengthプロパティを持たない:要素数を取得する機能がありません。 通常のforループでは走査できない:インデックスが存在しないため、for...in文などを使って反復処理を行います。 JavaScriptの
-
C/C++の多次元配列とは?基本概念から動的メモリ確保まで徹底解説
C/C++における多次元配列とは、簡単に言えば「配列の配列」として定義されるデータ構造です。多次元配列では、データが表形式(行優先順/row-major order)でメモリ上に格納されます。 以下の図は、3×3×3の次元を持つ多次元配列のメモリ割り当て戦略を示したものです。 アルゴリズム 2次元配列を動的に確保し、操作するための基本的な手順は以下の通りです。 Begin 配列の次元を宣言する new演算子を使用して2次元配列 a[][] を動的に確保する 配列に要素を格納する 配列の内容を出力する deleteによってメモリを解放する End サン