マップは一意のキーと値が対応付けられた結合コンテナのこと。キーとその値のペア。キーからその値を得ることができる。
ゲームっぽくプログラムを書いてみた。ゲーム内のアイテムの名前をキーとして、値はそのアイテムの効果というもの。
#include <iostream> #include <map> #include <cstring> using namespace std; // アイテム名のクラス class ItemName { char name[80]; public: ItemName(char *s) { strcpy(name,s); } char *get() { return name; } }; bool operator<(ItemName a, ItemName b) { return strcmp(a.get(), b.get()) < 0; } // アイテムの効果 class ItemObj { char str[80]; public: ItemObj(char *s) { strcpy(str, s); } char *get() { return str; } }; // アイテムデータ char itemdata[][80] = { "potion", "heal HP", "key", "unlock a door", "lamp", "light", }; int main() { // マップの作成 map<ItemName, ItemObj> items; // 要素の追加 for(int i=0; i<3; i++) { items.insert( pair<ItemName, ItemObj>( ItemName(itemdata[i*2]), ItemObj(itemdata[i*2+1]) ) ); } map<ItemName, ItemObj>::iterator p; // アイテム名を入力して、効果を表示 char str[80]; while(1) { cout << "> "; cin >> str; p = items.find(str); if( p != items.end() ) cout << p->second.get() << endl; else cout << "unknown item." << endl; } }
マップではキーをソートしているのでキーとなるものには、<演算子が必要となる。
insert()関数で要素を追加する。マップの要素はキーと値のペアなので、pair
キーから値を得るにはfind()関数を使用する。値があった場合はそのiteratorを返し、ない場合はマップの末尾を返す。
実行結果
> lamp
light
> potion
heal HP
> key
unlock a door
> sword
unknown item.