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

九、红黑树

评论

  1. Windows Chrome 108.0.5359.125
    4月前
    2023-10-17 19:13:12

    你好,看完你的博客文章,感觉很不错!希望与你网站首页友情链接
    流量卡知识网
    http://53go.cn/
    专注于移动/联通/电信推出的大流量多语音活动长短期套餐手机卡的相关知识的介绍普及
    听说互换友情链接可以增加网站的收录量,特此来换,如果同意的话就给internetyewu@163.com[微信ganenboy]发信息或者就在此回复下吧!【建站问题也可以一起讨论!】

发送评论 编辑评论


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