STL中常用容器的使用方法
map
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
set
set和map基本使用方法一样,除了map是以一对数据存储外,其他都一样。
对于multimap和multiset两个函数基本使用和map和set一致,只有一点不同就是可以保留重复关键字数据。
unordered_map,unordered_set
对于map,前面已经提到过,其内部数据结构为红黑树,因此所有元素插入到map里面都会排好序,而且搜索过程为平衡二叉树搜索,因此时间复杂度为O(logN)。我们知道还有一种快速的搜索方法,那边是哈希(又名散列),利用哈希函数,通过哈希值能快速的查找到所需元素。unordered_map便是采用这种数据结构实现,unordered _map与map的使用基本一样,都是key/value之间的映射,只是他们内部采用的数据结构不一样。
注:特别是遍历操作--以上几种容器均需要采用迭代器进行访问遍历。
map<int,vector<int>,less<int>>mp; map<int,vector<int>,less<int>>::iterator it=mp.begin(); 或者 set<int>::iterator it=st.begin(); uordered_set<int>::iteratoe it;
if(it=mp.end())说明没有找到相应的元素/遍历到了尾部。
priority_queue 双向队列
构造析构
priority_queue <Elem> c 创建一个空的queue 。
数据访问与增减
c.top() 返回队列头部数据
c.push(elem) 在队列尾部增加elem数据
c.pop() 队列头部数据出队
其它操作
c.empty() 判断队列是否为空
c.size() 返回队列中数据的个数
可以看出priority_queue的函数列表与栈stack的函数列表是相同的。 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序
每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。
注:一定要记住优先队列里面默认的是大顶堆(less),如果实际需要的话,需要自己建立小顶堆。
priority_queue<int,vector<int>,less<int>>pq; //这是大顶堆 priority_queue<int,vector<int>,greater<int>>pq; //这是小顶堆
并且该容器的访问和stack基本一致,和上面的很多容器是不同的。