接3月6号学习总结
一、set multiset
set 和 multiset会根据特定的排序准则,自动将元素排序,两者的不同之处在于multiset可以允许元素重复而set不允许元素重复。
头文件: #include <set>
定义:set <data_type> set_name;
如:set <int> s; //默认由小到大排序
s.insert(elem) -- 安插一个elem副本,返回新元素位置。
s.erase(elem) -- 移除与elem元素相等的所有元素,返回被移除的元素个数。
s.erase(pos) -- 移除迭代器pos所指位置上的元素,无返回值。
s.clear() -- 移除全部元素,将整个容器清空。
迭代器:
Set<int>::iterator it;
For(it=s.begin();it!=s.end();++it)
Cout<<*it<<endl;
操作:
s.size() -- 返回容器大小。
s.empty() -- 返回容器是否为空。
s.count(elem) -- 返回元素值为elem的元素的个数。
s.lower_bound(elem) -- 返回 元素值>= elem的第一个元素位置。
s.upper_bound(elem) -- 返回元素值 > elem的第一个元素的位置。
二、map multimap
map不允许两个元素有相同的键值,但multimap可以。
头文件: #include <map>
定义:map <data_type1, data_type2> map_name;
如:map <string, int> m;//默认按string由小到大排序
m.erase(elem) 移除键值为elem的所有元素,返回个数,对于map来说非0即1。
直接元素存取:
m[key] = value;
查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
三、优先队列 (priority_queue)
优先队列权大的先出;
定义:priority_queue <data_type> priority_queue_name;
例如:priority_queue<int>q;
优先队列是权大的先出来;但是不一定单增也不一定单减;这个相当于是一个二分叉,对比上面的数,如果大的话互换位置。