概念
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是排序,没有去重