核心描述: map 就是從鍵(key) 到 值(value) 的一個映射.且鍵值不可重複,內部按照鍵值排序.函數
頭文件: #include <map>spa
拓展: multimap 是一個多重映照容器,鍵值能夠重複.unordered_set 是一個內部不排序的映射容器,需包含頭文件<unordered_map> code
構造方法:blog
map<int, string> kvm; //構造一個鍵爲 int 型, 值爲 string 型的 map
元素的插入:排序
kvm[1] = "abc"; // 值 "abc" 在 map 中的鍵值爲 1 ------方法1 kvm.insert (map<int, string> :: value_type(2, "def")); // 值 "def" 在 map 中的鍵值爲 2 ------方法2
利用 find 查找:string
map<int, string> :: iterator it;//定義迭代器 it = kvm.find(2); //find 只能根據鍵查找,且find函數返回的是迭代器. if (it == kvm.end()) cout << "Not Found" <<endl; else cout << it->first << " " << it->second << endl; //利用 first 和 second 訪問鍵 和 值.
利用 count 查找:it
int cnt = kvm.count(2); //count 按照查找的 鍵 返回找到的個數.因爲不重複即只能返回 0 或 1
根據鍵訪問值:class
string ss = kvm[1] //map 根據要訪問的 "鍵" 返回 "鍵對應的值", 須要用 find 或者 count 判斷 "鍵" 是否存在
map 的刪除:容器
it = kvm.find(1); kvm.erase(it); //利用 find 找到鍵爲 1的位置, 再經過迭代器刪除元素 ---------方法1 kvm.erase(1) //刪除鍵爲 1 的元素, 成功返回 」1「 不然返回 」0「 ---------方法2 kvm.erase( kvm.begin(), kvm.end() ); //經過迭代器區間性刪除, 區間爲前閉後開 ---------方法3
經常使用操做:遍歷
kvm.clear() //清空 map kvm.empty() //判斷 map 是否爲空 kvm.size() //返回 map 中元素的個數
其餘查找函數:
map<int, string> :: it; it = lower_bound(key); //返回鍵值 大於等於 給定鍵值的第一個位置 it = upper_bound(key); //返回鍵值 大於 給定鍵值的第一個位置
結構體類型的構造:
struct NODE{ int x; int y; bool operator < (const NODE& a) const{ if(x == a.x) return y > a.y;//二級排序爲 y 的降序 return x < a.x; //以及排序爲 x 的升序 } }; map<NODE, string> kvm; //必須重載結構體的 「<"
map 的遍歷:
map<int, string>::iterator it; for(it = kvm.begin(); it != kvm.end(); it++) { cout << it -> first << " " << it -> second << endl; }