Map ======== Introduce -------- 欲使用map需先於程式開頭加上 ```c #include ``` Map通常用於將資料整合成一對一關係 其對關係為map 其中一個value可以對應多個key 但是一個key只能對應一個value 例如常用的是用 int 將 string 做編號 : ```c map m; int n; string s; cin >> n >> s; m[n] = s; //Beware of the input order must suit the format of map ``` 而欲讀取資料的話需給予他iterator 注意:如果使用iterator時要符合格式.如果有格式不同的map則需另建一個新的iterator不可共用 ```c map ::iterator it; map ::iterator it2; ``` map在資料存取中.key的為.first, value的為.second 例如要讀取所有的map的資料 (.begin ```c cout << "The datas stored in the map are: "; for(it = m.begin(); it!= m.end(); it++) { cout << (*it).first << " " << (*it).second << endl; } //.begin() stands for the first data stored in the map ``` 或是如果只有要讀取"被你編號的某個" string ```c int search; cout << "Input the number ID of the string you are looking for : "; cin >> search; cout << m[search] << endl; ``` An fully executable program example : ```c #include #include #include using namespace std; int main() { map m; map::iterator it; int n; string s; int search; cout << "Please insert the datas you want to save into the map :" << endl; cout << "(0 0 to quit)" << endl; while(1) { cin >> n >> s; if(n == 0 && s == "0") break; m[n] = s; } cout << "The datas stored in the map are : " << endl; for(it = m.begin(); it!= m.end(); it++) { cout << (*it).first << " " << (*it).second << endl; } cout << "Input the number ID of the string you are looking for : "; cin >> search; cout << m[search] << endl; } ``` Output: ![](/map1.png) Member functions ---------------------------- ### .size() 可以用來檢測當前map裡有幾筆資料 例如 ```c map m; int n; string s; while(1) { cin >> n >> s; if(n == 0 && s == "0") break; m[n] = s; cout << "SIZE: " << m.size() << endl; } ``` ![](/map2.png) ### .clear() / .empty() .clear()是用來清空map裡所有資料的一個member function .empty()是用來察看map裡的資料是否是空的的member function (returns boolean) ```c cout << "Is it empty ?" << endl; if(m.empty()) cout << "Yes~" << endl; else cout << "No~~~~~" << endl; cout << "Is it empty now?" << endl; m.clear(); if(m.empty()) cout << "EMPTY!" << endl; else cout << "Nope" << endl; ``` ![](/map3.png)