STL中常用容器的使用方法

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基本一致,和上面的很多容器是不同的。

猜你喜欢

转载自blog.csdn.net/qq_20110551/article/details/81561809