概念
map和set底層都是紅黑樹
set是key模型結構,本質就是看一個元素在不在容器中。
map是key/value結構,里面存了一個pair結構,可以通過一個值來查找另外一個值
map和set結構中遍歷出來的都是有序并且去重了的,map和set都支持增刪查并不支持改,因其底層是紅黑樹,改數據會使其不再是紅黑樹的結構了
pair結構
pair結構就是一個鍵值對
map插入的三種方法
1對象插入
map<string,string> dict;
pair<string,string> kv1("排序","sort");
pair<string,string> kv2("左邊","left");
dict.insert(kv1);
dict.insert(kv2);
2匿名對象插入
map<string,string> dict;
dict.insert(pair<string,string>("排序","sort"));
dict.insert(pair<string,string>("左邊","left"));
3make_pair插入
map<string,string> dict;
dict.insert(make_pair("排序","sort"));
dict.insert(make_pair("左邊","left"));
make_pair是最好用的,因為其可以自動識別類型
set
set默認是排升序,參數傳greater可以排降序
插入可以直接用值來作參數
也可以插入一段迭代器區間
插入的返回值也是一個pair結構
map
set沒有支持【】操作而map支持了,

它的參數是pair中的first,返回值是pair中的second,并且返回的是引用,可以根據first來修改second
例如:統計水果次數
string arr[]={"蘋果","西瓜","香蕉","蘋果","西瓜","西瓜","西瓜","蘋果"};
map<string,int> countmap;
for(auto str : arr)
{countmap[str]++;
}
此外【】自帶插入功能,如果是第一次出現“西瓜”這個字符,他會自動插入,如果是第二次甚至多次出現,他會自動計數++
【】的功能:1插入2查找3修改
multimap和multiset
map和set是排序加去重,multimap和multiset是排序,沒有去重