Vector、List、map的区别和联系

Vector是动态数组,适合随机访问和查询效率高的场景,但插入和删除效率低。List基于链表,插入和删除高效但随机访问慢。Map使用红黑树实现,提供快速查找和键值对存储,但插入时需调整红黑树可能影响效率。

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

Vector是一个动态数组。Vector中的元素可以按顺序存储,并且可以根据索引位置进行访问和修改。可以动态调整大小,可以使用push_back()函数在尾部添加元素,使用pop_back()函数删除尾部元素。允许存储重复的元素

优点:支持随机访问,即下标访问和迭代器访问,所以查询效率高。

缺点:往头部或中部插入或删除元素时,为了保持原本的相对次序,插入或删除之后的所有元素都必须移动,所以插入效率比较低。

适用场景:适用于对象简单,变化较小,并且频繁随机访问的场景。

List: list 封装了链表,是有序的。 不过在内存中不是连续的内存存储。每一个结点都包括一个信息块、一个前驱指针、一个后驱指针。可以不分配必须的内存大小就可以方便的进行添加和删除。

  • List的插入和删除操作非常高效,不需要移动其他元素。
  • List允许存储重复的元素。

优点:

1. 不使用连续的内存进行存储,存储空间无限(只要内存够)。可以在任意位置插入或删除且效率高。
2. 在内部插入、删除很快(不需要进行内存拷贝或者移动,只需要进行指针的更改)

缺点:

1. 随机查找太慢
2. 相比vector 占用内存比较大

Map: 由红黑树实现,其元素都是“键值/实值”,所形成的一个对祖(key/value paris)。每个元素都有一个键,是排序准则的基础。每个键只能出现一次,不允许重复。Map内部自建一棵红黑树,这棵树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

  • Map中的元素是键值对(key-value)存储的,每个键都唯一,用于查找和访问对应的值。
  • Map可以动态调整大小,可以使用insert()函数插入键值对,使用erase()函数删除指定键的元素。
  • Map提供了快速的查找机制,可以使用键来获取对应的值。
  • Map不允许重复的键,如果插入具有相同键的元素,后面的元素会覆盖前面的元素。

优点:使用平衡二叉树实现,便于元素查找,且能把一个值映射成另一个值。

缺点:每次插入都需要调整红黑树,效率有一定影响。

map比vector查找更快(map的内部数据结构用rb-tree实现,而用vector你只能用线性查找,效率很低,也有一种说法,关联式容器拥有自动排序能力,并不意味它们在排序方面的执行效率更高。事实上由于关联式容器每安插一个新元素,都要进行一次排序,所以速度反而不及系列容器经常采用的手法:先安插所有元素,然后调用排序算法进行一次完全排序。)

如果需要快速随机访问元素,可以选择Vector;如果需要频繁插入和删除元素,可以选择List;如果需要键值对的存储和查找,可以选择Map。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值