C++ STL中的常用容器

一、map


map mp;
其中,typename1是键的类型,typename2是值的类型。
注:如果是字符串到整型的映射,必须使用string而不能用char数组!

1、通过下标访问:
和普通数组一样,例如一个定义为map mp的map来说,可以直接使用mp[‘c’]的方式来访问它对应的int整数。可以直接使用mp[‘c’] = 20这样的方式来赋值:

2、通过迭代器访问:
map迭代器的定义和其他STL容器迭代器定义的方式相同:
map::iterator it;
这样就得到了迭代器 it 。
map可以使用it->first来访问键,it->second来访问值:

find(key)返回键为key映射的迭代器,时间复杂度为O(logN),N为map中映射的个数
erase():
erase()有两种用法:1、删除单个元素。2、删除一个区间内所有的元素
mp.erase(it),it为需要删除的元素的迭代器。时间复杂度为O(1)
mp.erase(key),key为要删除的映射的键。时间复杂度O(logN),N为map内元素的个数
mp.erase(first, last),其中,first为需要删除的区间的起始迭代器,last为需要删除的区间末尾迭代器的下一个地址,即为删除左闭右开的区间[first, last)。时间复杂度为O(last - first)
size()用来获得map中映射的对数,复杂度为O(1)
clear()用来清空map中的所有元素,复杂度为O(N),N为map中元素个数

二、stack

先进后出

stack q; //以int型为例
int x;
q.push(x); //将x压入栈顶
q.top(); //返回栈顶的元素
q.pop(); //删除栈顶的元素
q.size(); //返回栈中元素的个数
q.empty(); //检查栈是否为空,若为空返回true,否则返回false

三、queue

先进先出

queueq;
q.push(x) 在队尾插入一个元素
q.pop() 删除队列第一个元素
q.size() 返回队列中元素个数
q.empty() 如果队列空则返回true
q.front() 返回队列中的第一个元素
q.back() 返回队列中最后一个元素

四、优先队列priority_queue

priority_queue ,又称优先队列 ,是一个容器——允许在O(lgN)时间复杂度下插入 数据、在O(1)时间复杂度下取得容器内最大(最小)值 。

bool operator<(My_Type a,My_Type b)//大顶堆 { // 定义排序规则 if(a.x==b.x) return a.yque; q.

q.empty(); //是否为空
q.top(); //取最高优先级
q.pop(); //删除第一个
q.push(); //插入
q.size(); //返回个数

五、set

二分查找

sets;
set::iterator it;
s.insert(x);//插入x
s.find(x); //返回x的定位器
s.erase(iterator); //删除定位器iterator指向的值
s.erase(first,second);//删除定位器first和second之间的值
s.erase(key_value);//删除键值key_value的值
s.begin(); //返回set容器的第一个元素
s.end(); //返回set容器的最后一个元素
s.clear(); //删除set容器中的所有的元素
s.empty(); //判断set容器是否为空
s.count(x);//查找x是否存在
s.max_size(); //返回set容器可能包含的元素最大个数
s.size(); //返回当前set容器中的元素个数
for(it=s.begin();it!=s.end();it++)// set循环

六、vector


变量声明:
声明一个int向量以替代一维的数组:vector a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector a.同理想用向量代替三维数组也是一样,vector a;再往上面依此类推.

1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
//第一种,下标遍历
for(int i = 0; i < n; i ++) cout< :: iterator iter = ve.begin(); iter != ve,end(); iter ++) cout<< *iter;

七、list

list l1;//创建一个空对象
list l2(3, 1);//创建一个包含3个1的对象
list l3(l2);//拷贝构造
list l4(l3.begin()++, l3.end()--);//在l3.begin()与l3.end()之间创造对象
l1.push_back(1);
l1.push_front(6);
l1.pop_front();
l1.pop_back();
l1.size();
l1.empty();
l1.insert(pos, 5);//在pos位置前加1个5
l1.insert(pos, 3, 5);//在pos位置前加3个5
l1.insert(pos, l3.begin(), l3.end());//将l3加到pos位置前
l1.erase(pos);//删除pos位置元素
l1.erase(++l1.begin(), --l1.end());//删除中间内容
l1.sort();
l1.clear();
l1.swap(l2);
l1.reversr();//链表倒置
l1.merge(l2,l3);//合并两个有序链表
l1.unique();//去重
l1.remove();//删除元素
l1.remove_if();//按条件

八、hashtable

九、红黑树

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇