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的。即使各个容器的内部实现原理不一样,但是我们有必要分析这几个容器性能上的一些区别,以保证初学者能正确的选择容器,从而提升程序的效率

以下是本人测试出的数据:

insert和push_back是指批量顺序插入数据的数量1w 10w ....

find是指从1w 10w.....中查找一条任意数据的最大耗时

结论:

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

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

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

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

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

其实少用map也好,用hash_map或者unordered_map代替之,虽然内存会多消耗一些,但是插入删除数据时不需要再维护红黑树而导致速度慢,查找的速度也不亚于map。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇龍_

若帮助到你,希望能给予鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值