(1)使用map/multimap之前必須包含頭文件<map>:#include<map> 並且和所有的關聯式容器一樣,map/multimap通常以平衡二叉樹來完成 (2)namespace std{ template <class key, class T, class Compare = less<key>, class Allocator = allocator<pair<const key, T> > > class map; template <class key, class T, class Compare = less<key>, class Allocator = allocator<pair<const key, T> > > class multimap; } 第一個template參數被當作元素的key,第二個當作元素的value。key/value必須具備assignable和copyable性質,對排序而言key必須是comparable。第三個參數為排序准則,和map/multimap一樣這個排序准則必須是strict weak ordering的,元素的次序由他們的key決定,和value無關,map/multimap根據元素的key自動對元素進行排序。 (3)map/multimap的操作函數: map c 產生一個空map/multimap map c(op) 以op為排序准則產生一個空map/multimap map c1(c2) 產生某一個map/multimap的副本 map c(beg, end) 以區間[beg, end)內的元素產生一個map/multimap map c(beg, end, op) 以op為排序准則,以區間[beg, end)內的元素產生一個map/multimap c.~map() 銷毀所有元素,釋放內存 其中map可為下列形式:map<Key, Elem>、map<Key, Elem, op>、multimap<Key, Elem>、multimap<Key, Elem, op> c.size() 返回當前的元素數量 c.empty() 判斷c是否為空 c.max_size() 返回可容納的元素最大數值 c1 compare c2 compare可為==,!=,<,>,<=和>= c.count(elem) 返回“鍵值等於key”的元素個數 c.find(elem) 返回“鍵值等於key”的第一個元素的迭代器,如果找不到就返回end() c.lower_bound(key) 返回“鍵值為key”之元素的第一個可安插位置,也就是“鍵值>=key”的第一個元素位置 c.upper_bound(key) 返回“鍵值為key”之元素的最後一個可安插位置,也就是“鍵值>key”的第一個元素位置 c.equal_range(key) 返回“鍵值為key”之元素的第一個和最後一個可安插位置,也就是“鍵值==key”的元素區間 lower_bound()、upper_bound()和equal_range()行為與set相應的函數十分相似,唯一不同的是:元素是一個key/value pair。 c1 = c2 將c2全部元素賦值給c1 c1.swap(c2) 將c1和c2元素互換 c.begin() 返回一個雙向存取迭代器(將key視為常數),指向第一個元素 c.end() 返回一個雙向存取迭代器(將key視為常數),指向最後元素的下一個位置 c.rbegin() 返回一個逆向迭代器,指向逆向迭代的第一個元素 c.rend() 返回一個逆向迭代器,指向逆向迭代的最後元素的下一個位置 這裡的元素是一個key/value pair(pair<const key, T>)。 c.insert(elem) 插入一個elem副本並返回新元素的位置 c.insert(it, elem) 安插elem副本返回新元素的位置(it是一個提示指出安插操作的搜尋起點) c.insert(beg, end) 插入區間[beg, end)內的所有元素副本,無返回值 c.erase(elem) 移除“value與elem相等”的所有元素,返回被移除元素的個數 c.erase(it) 移除it位置上的元素,無返回 c.erase(beg, end) 移除[beg, end)區間內的所有元素,無返回 c.clear() 將容器清空 這裡的元素是一個key/value pair(pair<const key, T>)。