C++的STL模板set,multiset,map,multimap,deque,list,stack,queue和priority_queue

set实际上是平衡二叉树,需要声明头文件#include<set>

Insert:将元素插入集合中

使用前向迭代器对集合中序遍历

使用反向迭代器reverse_iterator可以反向遍历集合,需要用到rbegin()和rend()方法。

erase:删除的对象可以是某个迭代器位置上的元素、等于某键值的元素、一个区间上的元素和清空集合(clear)。

find:对集合进行搜索,如果找到查找的键值,返回该键值的迭代器位置,否则,返回最后一个元素后面的位置,即end().

set使用insert()将元素插入到集合中,根据设定的比较函数将该元素放到该放的节点上去。默认的比较函数是按键值从小到大的顺序插入元素。在很多情况下,需要自己写比较函数。编写比较函数的两种方法:

(1) 元素不是结构体,重写运算符()。下面这个是按键值从大到小的顺序将元素插入到集合中

struct myComp

{

bool operator()(const int &a,const int &b)const

{

return a > b;

}

}

(2) 元素是结构体,在结构体中重写运算符<。

struct Info

{

string name;

float score;

bool operator <(const Info &a)const

{

return a.score <score;

}

}

multiset用红黑树来组织元素数据的,允许重复元素的插入。需要声明头文件#include <set>

erase:删除multiset中的某个迭代器位置上的元素、某迭代器区间中的元素、键值等于某个值的所有重复元素并返回删除元素的个数。

clear():清空元素

find:如果找到,返回该元素的迭代器位置(如果该元素有重复,则返回第一个元素重复元素的迭代器位置),如果没有找到,返回end()迭代器位置。

map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。其也是采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较。插入大概有两种方法,一种是直接m[key] = value,其中m是map类型数据,key是声明时的键值类型的数据。另一种是使用方法insert(pair<type1, type2>(type1数据,type2数据)).

erase:删除某个迭代器位置的元素、等于某个键值的元素、一个迭代器区间上的元素

clear:清空元素.

元素反向遍历:使用反向迭代器reverse_iterator,需要用到rbegin()和rend()方法

find:如果找到,返回该键值的迭代器位置,否则返回end()迭代器位置。

比较函数:其比较函数与set一样。

multimap允许插入重复键值的元素,需要声明头文件#include<map>

erase:删除某个迭代器位置上的元素、等于某个键值的所有重复元素、一个迭代器区间上的元素。

clear:清空元素

find:只返回重复键中的第一个元素的迭代器位置,没有找到就返回end()

deque是双端队列容器,需要声明头文件#include<deque>,其对象创建与vector相似,有三种:一种是空元素,一种是固定n个元素的,另一种是固定n个,有初始值的。

push_back:从尾部插入元素,会不断扩张队列

push_front():从头部插入元素,不会增加新元素,只将原有的元素覆盖。相当于将原有的元素向后移,移出去的元素就有存在了。

insert:从中间插入元素,不会增加新元素,只将原来的元素覆盖。

元素遍历:(1)以数组方式;(2)以前向迭代器的方式;(3)反向迭代器方式

pop_front:从头部删除元素

pop_back:从尾部删除元素

erase:从中间删除元素,其参数是迭代器位置

clear:清空deque对象

list是双向循环链表容器,需要头文件#include<list>.由于list对象的节点并不要求在一段连续的内存中,对于迭代器,只能通过”++”或”--”的操作将迭代器移动到后继/前驱节点元素处,而不能对迭代器进行+n或-n的操作,这是与vector不同的地方。

push_back:向尾部插入新元素,链表自动扩张

push_front:向首部插入新元素,链表自动扩张

inset:向迭代器位置处插入新元素,链表自动扩张,注意,迭代器只能进行”++”或”--”操作。

元素遍历:(1)前向迭代器遍历;(2)反向迭代器遍历

remove:根据元素的值来删除,而不是根据迭代器位置

erase:删除迭代器位置上的元素

pop_back:删除链表尾元素

pop_front:删除链表首元素

clear:清空链表

unique:删除连续重复元素

find:注意这个是用#include<algorithm>中的算法,而不是用list的成员方法

sort:注意这个是list的方法,则不是#include<algorithm>中的算法

stack是堆栈容器,声明头文件#include<stack>

push:将元素入栈

pop:出栈

top:访问栈顶元素

empty:判断堆栈是否为空

size:返回当前堆栈中有几个元素

queue是队列容器,需要声明头文件#include<queue>

push:入队

pop:出队

front:读队首元素

back:读队尾元素

empty:判断队列是否为空

size:队列当前元素的数目

priority_queue是优先队列容器,需要头文件#include<queue>.有一个特性,就是队列中的最大元素总是位于队首,并非按先进先出的原则进行,而是将当前队列中最大的元素出队。元素的比较规则默认为按元素的值从大到小排序,可以重载”<”操作符或操作符”()”来重新定义比较规则。

push:入队

pop: 出队

top:读队首元素

empty:判断队列是否为空

size:返回队列元素个数