容器小作业,关联式容器与无序容器

本文深入解析了关联式容器(set, multiset, map, multimap)的特点,比较了它们与无序容器(unordered_set, unordered_map)的差异,包括初始化方式和遍历方法。同时举例说明了list, vector, deque, map, set的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器学习

关联式容器有哪些,各自有什么特点?
关联式容器有哪些?

(1)集合:set,multiset,保存key,set的key值是唯一的,multikey的key值是可以重复的。使用的场合呢,也不一样。
(2)映射 map,multimap我的理解就是图的结点,既有权值也有名字,例如v1结点值为4,pair<v1,4> ,保存key-vallue对,使用pair存储,map的key值唯一,而且难能可贵的是map会按照key值自动排序,multimap的key值可重复。
他们的共同点就是都是使用红黑树实现。

无序关联式容器有哪些?

无需关联都是用unordered开头的,都是底层用哈希表来实现。
有无序的集合,如unordered_set,无序的映射有unordered_map

map与set有什么区别,分别是怎么实现?

set存放的是key,map存放的是pair<key,value>,实现方式是红黑树,区别一个存放的是数值,一个存放的是一个键值对。

关联式容器与无序关联式容器的初始化方式有哪些?如何进行遍历?代码如何实现?
#include <iostream>
#include <vector>

using namespace std;

//无序和关联初始化方式都相差不大,以vector为例
vector<int> it[5]={1,2,3,4,5};
vector<int> it(1,2,3,4,5);
int arr[5]={1,2,3,4,5};
vector<int> it(arr,arr+5);

//键值对初始化有点不一样呀
map<int,string> m1={
{1,"hello"},{2,"world"},{3,"asdfd"}};

//遍历方式
vector<int> number;
for(auto &elem:number)
{}
vector<int>::iterator=number.begin();
for(;it!=number.end();it++)
{}
multimap和unordered_map为什么不支持下标访问?

这个问题其实很简单了,因为multimap键值不唯一,这样就没法实现一对一的查找,会出现二义性,这就很致命。而unordered_map的底层实现是红黑树,这样就没法进行随机访问,红黑树实现的是类似直接访问?从头结点开始二分查找?

分别给出最适合用list,vector,deque,map及set的例子

list比较适用于增删不频繁的系统,epoll的就绪队列,就是一个双向链表。
vector 用于记录历史数据,就是一个数组,可以随机访问频繁的
deque 用于排队,这就是一个队列,缓冲队列?,频繁对数据结构的头部和尾部进行操作的系统。
set 记录历史最好成绩 ??,存储不重复的数据,自动去重。
map 记录个人数据,因为个人id都是唯一,不会重复,而且查找方便。更重要是自动排序,可以模拟查字典。

无序容器与有序版本有何优势?有序版本有什么优势?

无序版本使用哈希表实现,查找的时间复杂度是O(1),以空间换时间。有序版本使用红黑树实现,不申请额外的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值