以string为键值的容器

http 的 header和 params最方便的储存方式就是使用 map<string,string>. 以前我也一直这么做,但最近用gprof后发现这是个很耗cpu的容器。

在header和params确定且数量不多的时候,改用vector和find方式反而速度更快(提升有3倍),因为map的构造比较耗时,少数据量查找也没有优势(vector的结构简单且内存连续,少数据量是反而更快)。


map<string, string>的数据量比较多的话,用vector不会更快,这是应该考虑hash容器,因为hash容器的字符比较操作更少很多。

 

以 string作为键值的容器,在选取键值的时候,应该让差异的部分在前面。 比如 cmd_query_user, cmd_query_order就是糟糕的键值,而user_query和order_query效率会更高(可读性也更好,英语国家的习惯发挥优势了)。

 

对于const 容器(就是一次构造,后续不改变的), 元素少的时候 , sorted vector也比map效率更高,元素多的时候还是要考虑hash容器。


如果自己有时间的话,也可以实现trie树,没有测试过效率,估计在 vector 和 hash之间,肯定是比map效率高。

 

当然这些优化的前提时,这些容器影响效率,如果没有,那么使用map<string,string>是最简单和直观的了。

(gprof可以帮助你剖析程序的热点, Visual Stuidio Team 版也有性能剖析工具)

 

 

转载于:https://www.cnblogs.com/napoleon_liu/archive/2010/07/27/1786459.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值