map容器是一個鍵值對key-value的映射。其內部實現是一棵以key為關鍵碼的紅黑樹(平衡樹的一種)。map的key和value可以是任意的數據類型(包括int、double、long long、string、struct、vector、queue等等)。這里不對map的原理進行深入研究,只研究它的一些簡單應用(復雜的不會qwq)。
1.map的聲明方法:
①.map數據結構包含在<map>的頭文件中
②.map的定義方式:map的定義方式為“map<key_type,value_type> name”,其中key_type表示的是被映射的數據類型,相當於自變量x的數據類型;value_type表示的是映射到的數據類型,相當於因變量y,name則表示映射名。
舉例:
map<long long,bool> vis;
定義了一個將long long類型數據映射到bool類型上的映射map;
map<string,int> hash;
定義了一個將string類型數據映射到int類型上的映射hash;
這里的hash表示哈希,是一種常見的解決查找字符串問題的方法,其原理便是將字符串映射為一個數字。
map< pair<int,int>, vector<int> > test;
將一個pair二元組映射到一個動態數組vector上。
2.map的操作:
①. size/empty/clear:
分別表示查詢一個映射的元素個數、是否為空、清空。
②.[ ]操作符:
h[key]返回映射h中的自變量key映射到的value的值。
好處:可以通過h[key]的操作來查詢k映射到的value的值並進行修改(這樣可以避免枚舉耗時)。
3.map與哈希函數的聯系和區別
map和哈希函數其應用都是將復雜的字符串等數據轉化為簡單的數字進行處理。相比之下,哈希函數要更加復雜,而map的實現相對簡單。但是,由於map的實現內部是一棵紅黑樹,這就導致[ ]操作符的時間復雜度並不是O(1),而是O(log n),相比之下哈希函數的實現是O(1)的。所以在一些特殊的情況下,map會超時。