vector,map以及list性能对比

虽然说map是关联容器,一般关联的数据都使用map来存储,但是实际上vector或者list也是可以代替这样的功能。

具体实现可以看

vector或list保存结构体或对象时的查找方法_宇龍_的博客-CSDN博客

比如vector保存一个结构体:

struct stData
{
    int key;
    int value;
}


又或者用vector或者list保存pair对象,再通过std::find或者std::find_if来查找值即可实现和map一样的效果,虽然查找速度不如map,但某些性能是远胜于map的。即使各个容器的内部实现原理不一样,但是我们有必要分析这几个容器性能上的一些区别,以保证初学者能正确的选择容器,从而提升程序的效率。

以下是测试出的数据:

 

结论:

map的特点: map查找数据的速度是最快的(即使数据到达百万级也可以说是毫秒级),但其查找性能是以插入数据时维护底层红黑树作为代价的——即插入数据比较耗时。通过以上数据可以看出,大量数据插入的场景是不适合map的,性能非常低,比vector和list慢几倍甚至十几倍。

应用场景:map适合偶尔插入一条数据并且很少clear,又频繁查找的场景。

vector 的特点:vector插入数据的速度是几者中最好的,即使把vector扩容时的损耗计算在内。并且vector的查找速度比list快,其原因是list可能会多一些判断,比如下一个节点是否存在啊之类的,但是vector就可以直接快速遍历。当然对于查找我们就不用手动遍历了,那样性能太低了,直接使用std::find或者std::find_if就行了,速度会快速倍

list的特点:list插入速度稍慢于vector,查找速度也稍慢于vector,但是比较适合频繁的随机删除节点或插入节点的应用场景,因为list就不像vector那样删除或插入节点会导致节点后的数据拷贝。但实则上能不用list就不用吧,list调试起来比较麻烦。

总之,经常动不动就clear,然后大量插入新数据,偶尔查找一下的——那就用vector吧,性能相对极高。

其实少用map也好,用hash_map或者unordered_map代替之,虽然内存会多消耗一些,但是插入删除数据时不需要再维护红黑树而导致速度慢,查找的速度也不亚于map。
————————————————
版权声明:本文为CSDN博主「宇龍_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Think88666/article/details/89318449

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值