2019年3月5日训练日记

这两天把剩下的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