Sunday, June 23, 2013

std::map

std::map是C++中的函式,include <map>之後可以使用。

很多時候我們需要用「一種資料」去查另外一種「對應的資料」,這時候就是map上場的時候了,有些程式語言稱為dictionary,顧名思義就是查字典的意思。使用一個"key"去找對應的"value"。

注意key可以是任何的資料形態,value也是,以下是一個簡單的範例程式,包含:

  1. setter:設定新的項目
  2. getter:取得已存的項目,若不存在會回傳0,並被加入map中
  3. is not found:檢查該key有無存在在map中
  4. wall through:走過所有map中的項目

#include <cstdio>
#include <map>
#include <iostream>

using namespace std;

int main(){

 map<char, int> myMap;
 map<char, int>::const_iterator iter;

 // setter
 myMap['h']=2;
 myMap['e']=3;

 // getter
 printf("%d\n", myMap['h']); //2
 printf("%d\n", myMap['e']); //3
 printf("%d\n", myMap['r']); //0, not exist

 // check if exsit
 int isNotFound;
 isNotFound = ( myMap.find('z') == myMap.end() );
 printf("%c\n", (isNotFound)?'y':'n'); // y

 isNotFound = ( myMap.find('e') == myMap.end() );
 printf("%c\n", (isNotFound)?'y':'n'); // n

 // walk through all elements in map
 for(iter = myMap.begin() ; iter != myMap.end() ; iter++)
  printf("- %c:%d\n", iter->first, iter->second);

 return 0;
}