mapクラス

目次

mapクラスとは

標準テンプレートライブラリ内にあるクラスの一つであるmapクラスについて学習しましょう。

mapクラスはコンテナの一種です。
vectorクラスは配列のようなデータの並びを格納しましたね。
mapクラスでは、データとキー値をペアで格納することができます。
簡単に言うとデータに名前を付けられると考えて良いでしょう。

配列を思い出しましょう。
連続するデータを添え字を使って区別していましたね。

int array[5] = {100, 150, 120, 170, 110};
std::cout << array[0];

配列arrayの0番目すなわち一番最初の値である100を表示します。
[]で囲まれた部分が添え字です。

数字で管理するなら配列で問題ありませんが、それだとわかりにくい場合もありますね。
配列なら2次元にして名前を一緒に格納するのが現実的なところでしょうか。

mapクラスのオブジェクトを使えば以下のように呼び出すことができます。

array["string"];

よりわかり易いコードが書けそうですね。

mapクラスの使い方

mapクラスを使うには

をインクルードします。

#include <map>

オブジェクトを生成する際、vectorと同様に格納するデータの型を指定する必要がありますが、mapの場合はキー値と値の型をそれぞれ指定しなければなりません。

map<【キー値の型】, 【データの型】> 【オブジェクト名】

例えば、int型のデータにstring型のキー値を設定する場合は以下のように記述します。

map<string, int> m;

キー値が先でデータが後になるのでご注意ください。

データを追加は以下のようになります。

【オブジェクト名】.insert(pair<【キー値の型】, 【データの型】>(【キー値】,【データ】))

具体例はこのようになります。

m.insert(pair<string, int>("string", 100));

insertメソッドを使ってデータを挿入します。

引数のpairとはpairクラスのオブジェクトです。
mapクラスはpairクラスのオブジェクトを格納するクラスです。

この場合

m["string"]

は100を表します。

挿入位置は末尾ではありません。
キー値によってソートされます。

反復子を使うことでキー値にもアクセスできます。

map<string, int>::iterator im;
im = m.begin();
std::cout << im->first << " " << im->second; 

サンプルコード

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(void)
{
    map score;
    map::iterator iscore;

    score.insert(pair<string, int>("tarou", 100));
    score.insert(pair<string, int>("jirou", 60));
    score.insert(pair<string, int>("saburou", 80));

    cout << score["tarou"] << endl;

    iscore = score.begin();
    iscore++;
    cout << "score[¥"" << iscore->first << "¥"] = " << iscore->second << endl;

    return 0;
}



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA