这两天把剩下的stl看完了,然后看了一些经典例题,
1.set和multiset
两者的区别就在于set中的元素只能出现一次,multiset中的元素可以重复出现
头文件是
定义:set <data_type> set_name;
如:set s;//默认由小到大排序
set和multiset的搜寻操作函数

s.size()

集合中元素的数目

s.begin()

返回指向第一个元素的迭代器

s.end()

返回一个双向迭代器,指向最后一个元素的下一个位置

s.empty()

返回容器是否为空。

s.count(elem)

返回“元素值为elem”的元素个数

s.find(elem)

返回“元素值为elem”的第一个元素,如果找不到就返回end()

s.lower_bound(elem)

返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个位置

s.upper_bound(elem))

返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个位置

s.equal_range(elem)

返回elem可安插的第一个位置和最后一个位置

s.equal_range()

将lower_bound()和upper_bound()的返回值做个一个pair返回。

s.insert(elem)

安插一个elem副本,返回新元素位置

s.erase(elem)

s.erase(pos)

移除迭代器pos所指位置上的元素,无返回值。

s.clear()

移除全部元素,将整个容器清空。

2.map和multimap
头文件是
map <data_type1, data_type2> map_name;
如:map <string, int> m;//默认按string由小到大排序
map和set的区别是前者是一对,后者是一个的,map是映射,一一对应。
map不允许修改元素的键值,允许修改元素的实值。

m.size()

返回容器大小

m.empty()

返回容器是否为空

m.count(key)

返回键值等于key的元素的个数

m.lower_bound(key)

返回键值等于key的元素的第一个可安插的位置

m.upper_bound(key)

返回键值等于key的元素的最后一个可安 插的位置

m.begin()

返回一个双向迭代器,指向第一个元素。

m.end()

返回一个双向迭代器,指向最后一个元素的下一个位置。

m.clear()

讲整个容器清空。

m.erase(elem)

移除键值为elem的所有元素,返回个数,对 于map来说非0即1。

m.erase(pos)

移除迭代器pos所指位置上的元素。直接元素存取:

m[key] = value

查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。

m.insert(elem)

插入一个元素elema)运用value_type插入

3.优先队列(priority_queue)
头文件:
定义:priority_queue <data_type> priority_queue_name;
如:priority_queue q;//默认是大顶堆

q.push(elem)

将元素elem置入优先队列

q.top()

返回优先队列的下一个元素

q.pop()

移除一个元素

q.size()

返回队列中元素的个数

q.empty()

返回优先队列是否为空

2019年3月5日训练日记_迭代器

优先队列是个二叉树排序,并不是线性的
对于这个排序先放入5,再放入2,放入6,6比5大,和5交换位置,放入7,7比2大,和2交换位置,比6大,和6交换位置,再放入1,4。
然后就是同一行的左边比右边小。的厨排序后的序列是321567