以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 版也有性能剖析工具)

 

 

posted @ 2010-07-27 22:58  napoleon_liu  阅读(632)  评论(1编辑  收藏  举报