STL关联式容器

STL 序列式容器 : vector list deque
forward_list stack

STL 关联式容器 :里面存储数据的格式是<key,value>结构,与序列式容器相比 ,关联式容器的数据检索效率更高。

树形结构关联式容器
map multimap set multiset

底层均用红黑树实现。

键值对:

	表示一组具有一一对应的关系的结构,其里面存储的是一种key_value 结构的键值对,value表示key对应的值。

map(有序)

1 map ,健值key 通常用于排序和唯一的标识元素,value和 key的类型可以不同,在 map内部,key和value通过成员类型value_type 绑定在一起,取别名为pair

2 map中的元素总是按照key值进行比较排序的

3 map中通过键值访问单个元素的速度往往比unordered_map 容器慢,但map进行迭代访问,可以得到一个有序的序列。

4 map支持下表访问 【】 因为map健值唯一

5 map通常底层用平衡二叉搜索树来实现(红黑树)

map的类模版参数说明

class template
std::map

tempate<class key,//键类型
class T, 映射值类型
class Compare = less默认键值小的方式排序,
, class Alloc = allocator<pair<const Key , T>>> 选择的容器适配器类型

构造
map(const key_compare& comp =key_compare(), allocator_type& alloc = allocator_type()); .// 空的map
我们不难发现 ,如果想改变比较方式,提供一个函数,仿函数,lamda表达式就可以。同理容器适配器

扫描二维码关注公众号,回复: 10013841 查看本文章

区间构造
template
map( InputIterator first,Inputiterator last, const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());

拷贝构造:
map(const map& x)

map的迭代器 :

iterator begin() 返回第一个元素的位置
iterator end () 返回最后一个位置的下一个位置

const_iterator begin() const 返回const 迭代器
const_iterator end()const

reverse_iterator rbegin() 返回第一个位置的反向迭代器 rbegin()
reverse_iterator rend()

const_reverse_iterator rbegin()const,
const_reverse_iterator rend()const

函数说明
bool empty()const //检测map是否为空

size_type size()count;//返回map中有效元素的个数

mapped_type& operator [ ](const key_type& k);
返回key对应的value

注意:当调用operator【】时,若 key不存在,就会用默认的value 与输入的key组成键值对插入map中,再返回value

1插入元素
pair<iterator ,bool> insert(const value& x)//value_type 就是一个(mapped_value)值

// <iterator :插入位置, bool :释放插入成功>

iterator insert(iterator position,const value_type& x);

template void insert (InputIterator first,InputIterator last);//区间插入

2 删除元素

void erase(iterator position)

size_t erase(const key_type& x);//删除键为x的键值对

void erase(iterator first, iterator last)//区间删除

3 交换两个map的所有元素
void Swap(map<Key,T,Compare,Allocator>& mp) //交换 两个 map 中的所有元素

4 删除
void clear()//将map中的所有元素清空

5 查找
iterator find(const key_type& x);//查找键为x的值,找到返回位置,找不到返回 end();

const_iterator find (const key_type& x)const

size_type count(const key_type& x);//map中的 对个数非0 即1 可以检测键 存不存在

multimap

,multimap 和map 相比
multimap存在键相同,值不同的情况,因此他不存在operator【】;
其他接口都和map一样。

set

1 set 也是按一定顺序存储的
set 其实存的是 <value , value >对,所以每个 value必须唯一。
2 同样 set也是按照严格的若排序排序的,
3 set通过key值访问单个元素的速度也比unordered_map 慢

1 set 与 map/mulitimap 不同的是, set存储的是<value ,value >对构成的键值对。

2 set 插入元素时,只需要插入value 就可以了,不需要构建键值对,即就插入key = value

3 set中不会出现重复的键值对

4 set /map /multimap 都默认小于来比较

5 查找元素时间复杂度O(log2 N)

std::set 的类模版类似于map,但少一个value_type
同样 ,构造函数 ,拷贝构造,区间构造类似

set的迭代器

//普通迭代器
iterator begin()
iterator end()

//const 类型迭代器
const_iterator cbegin()const
const_iterator cend()const

//反向迭代器
reverse_iterator rbegin()
reverse_iterator rend()

//const 反向迭代器
const reverse_iterator crbegin()const
const reverse_iterator crend() const

bool empty()
size_type size()const;//set键值对的个数

3个插入函数

pair<iterator , bool> insert(const value_type& x);//<iterator为插入成功,返回插入后的位置,返回bool = true ,如果插入的值已经存在,那么插入必定失败,那么 bool = false,返回已存在的位置>

iterator insert<iterator position, const value_type &x>//在position位置插入x,但这个位置只是个参考位置,最终并不一定在这里。因为set是严格弱排序的

template void insert(InputIterator first ,Input Iterator end();

3 个删除函数
void erase(iterator position);

size_type erase(const key_type& x)//返回被删除的元素的个数

void erase(iterator first , iterator last);

void Swap(set<key,Compare,Allocator>& st);交换两个set对象中的内容

void clear()

iterator find(const key_type& x)const;
size_type count(const key_type& x)const;//返回中值为x的个数(非0即1 ,可以判断存不存在值x)

multiset

与 set 不同的是 ,multiset 可以出现重复键值对,

map set multimap multiset 均不能修改元素。元素都是const类型的。

发布了90 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44030580/article/details/104561730