STL容器 -- Map

核心描述: 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;
}
相關文章
相關標籤/搜索