STL标准模板库2

1、queue队列容器
头文件:#include
链式队列
不支持运算符、没有迭代器、只有无参构造和拷贝构造
back 获取队尾元素
front 获取队头元素
empty 判断是否队空
push 入队
pop 出队
size 获取队列元素

2、stack栈容器
头文件:#include
链式栈
不支持运算符、没有迭代器、只有无参构造和拷贝构造
push 入栈
pop 出栈
top 获取栈顶元素
size 获取栈元素数量
empty 判断是否栈空

3、priority_queue 优先队列容器
#include
优先队列,该队列会对入队的数据进行排序,默认元素值越大,
优先级越高,越先出队
注意:存储的元素必须支持 < 运算符
如果类型不支持,需要手动实现<运算符函数,可以根据需要在该
函数中修改优先级
push 入队
pop 出队
top 获取队头元素
size 获取队列元素数量
empty 判断是否队空

4、deque双向队列容器
头文件: #include
双向队列容器,用法与vector一模一样,只是底层采用双向链表存储数据,
vector是顺序表
优点:比vector节约内存
缺点:速度要比vector慢
支持的运算符:
[] 可以像向量一样“随机访问”元素
= == != < > <= >= 比较规则与vector一致
注意:虽然可以像随机访问一样去访问元素,但是底层是不支持随机访问的,本质上[]
运算符还是遍历访问,因此速度比vector慢,其实就是在vector的基础上
增加了双端操作的功能而已

5、set集合容器
头文件:#include
集合容器,特点是元素不重复,会对元素自动排序,因此它存储的元素必须支持<
运算符,只能迭代器遍历访问
底层:采用红黑树实现的
构造函数:
只有无参构造和拷贝构造
运算符:
与list一致

成员函数:
size_type count( const key_type& key );
功能:获取集合中key元素的数量,在set中只能是1或0,意义不大

pair<iterator, iterator> equal_range( const key_type& key );
功能:查找set容器中值为key的元素位置范围,返回一个数据对[start迭代器,
end迭代器)
因为set数据不重复,该函数意义不大

iterator find( const key_type& key );
功能:查找set中值为key的元素位置,如果找到返回该元素的迭代器,
否则返回end()的值

pair<iterator,bool> insert( const TYPE& val );
功能:向容器中插入一个数据
返回一个键值对,成功(迭代器,true),否则(end,false)

key_compare key_comp() const;
功能:返回容器中元素的比较方法 使用该方法可以对该类型的数据
进行比较
set<T> set;
set<int>::key_compare cmp=s.key_comp();
cout<<cmp(1,4)<<endl;

iterator lower_bound( const key_type& key );
功能:返回一个最小的大于等于key元素的迭代器

iterator upper_bound( const key_type& key );
功能:返回一个最小的大于key元素的迭代器

6、multiset
头文件:#include
多重集合容器,特点是元素可以重复,依然会对元素自动排序,因此
它存储的元素也必须支持<运算符,只能用迭代器遍历
底层:红黑树

pair<iterator, iterator> equal_range( const key_type& key );
功能:查找multiset容器中值为key的元素位置范围,返回一个数据对[start迭代器,
end迭代器)

7、map容器
头文件:#include
映射容器,是存储了由(key/value)组成的元素(字典、键值对),要求
键值对中的key不能重复,而且会根据key进行排序,要求key类型必须
支持 < 运算符
key和value是一一对应的,可以根据key来访问value
一般会在里面存储频繁需要查找的数据,因为map的查找速度特别快
(redis内存数据库)
底层采用红黑树存储数据,查找效率极高

构造函数:
map( iterator start, iterator end );
功能:使用一组pair<key/value>数据构造映射容器
map( iterator start, iterator end, const key_compare& cmp );
功能:使用一组pair<key/value>数据构造映射容器,并提供key的比较函数

支持[]运算符:      
    [] 通过使用key作为下标
    既可以访问key的键值,也可以给该键值对赋值(插入)
    m[key]=value;

iterator insert( iterator i, const TYPE& pair );
功能:在指定位置插入一个键值对(pair类型)
void insert( input_iterator start, input_iterator end );
功能:向映射容器插入一组数据(pair类型)
pair<iterator,bool> insert( const TYPE& pair );
功能:向映射容器插入一个键值对,返回插入位置以及结果

key_compare key_comp() const;
功能:返回map容器中key的比较函数,该函数可以针对相同类型的键值对进行
key的比较
value_compare value_comp() const;
功能:返回map容器中value的比较函数,该函数可以针对相同类型的键值对进行
value的比较

8、multimaps
#include
多重映射容器
使用方法与map一致,但不同的是它的key可以对应多个value
所以它无法支持[]运算符

通过迭代器删除元素时需要注意的问题:
对于关联容器(set\multiset\map\multimap),删除当前iterator时,
仅仅会让当前的迭代器失效,可以在erase时,递增当前的iterator可以
连续删除set.erase(it++),因为它们底层都是红黑树实现,因此插入、删除
一个节点不会导致其他节点无法访问
对于顺序容器(vector),当删除当前的iterator会让后面的元素iterator失效,
因为它底层是连续分配的内存,因此不能vector.erase(it++)
可以通过返回值拿到下一个元素的迭代器,出现赋值给it即可
it=vector.erase(it);

9、bitset容器
#include
位集合容器,是一种封装了各种位运算符操作的数据结构
支持的运算符:
!=,==,&=,^=,|=,~=,<<=,>>=,[]
成员函数:
bool any();
功能:有任意一位二进制为1,返回真
size_type count();
功能:返回二进制位为1的位数
bitset& flip();
功能:所有二进制位求反
bitset& flip( size_t pos );
功能:指定二进制位求反
bitset& reset();
功能:把所有二进制位置置零
bitset& reset( size_t pos );
功能:把指定二进制位置置零
bitset& set();
功能:把所有二进制位置置1
bitset& set( size_t pos, int val=1 );
功能:把指定二进制位置置1
size_t size();
功能:计算二进制的位数
bool test( size_t pos );
功能:测试某个二进制位是0还是1
string to_string();
功能:把二进制转换位字符串
unsigned long to_ulong();
功能:把二进制转换为 unsigned long

注意:bitset在C++中用处不大,但是在嵌入式开发中比较有用

为什么STL中有很多容器底层采用红黑树?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值