性病最有效的关联容器::字符串作为重点?

我读过的地方,性病::地图,与目前的编译器,还是我们在STL最有效的关联容器,即使有性病:: unsorted_map了--from我读的地方,我不知道,而─ - 关于变得找到更多有效的()只如果有很多项,如超过40K。

所以,现在我真的不知道了,因为我一直认为哈希映射更有效,至少在字符串键的情况。

所以要短:

如果我必须选择与未知项关联容器计数 ,并与性病::串钥匙,会是什么(至少在理论上)寻找更有效(速度)的选择呢?

--------------解决方案-------------

简介,简介,简介...

用字符串作为键的问题是,比较它们是很慢的(想想10​​00个字符的字符串的最后一个字符的区别)。 一个优势unordered_map一个字符串键来至少部分的事实,只有固定宽度的哈希值 ,必须进行比较,所以在实践中无序的地图可能是快了很多。

散列实现可以选择,例如,仅使用扩散出位的固定数量来计算哈希值,从而结束了把一些近乎相同的字符串以相同的水桶,所以这是一个折衷。 你也许可以编造了一套这两个容器会执行得非常糟糕键值,但对于字符串的“随机”或“典型的”收藏,我的赌注是哈希容器上。

当你有40K的条目或更多,字符串(或元件等的清单)不应该被用作标准容器关联的密钥。 相反,有那么一刻早得多,其中一个线索或三叉树成为更好的选择。 这两个都可以建立关联的结构,只有一次比较的字符串的每个字符(或列表的元素等)。 序映射比较在每一个节点(因此为O(M log n)的 - 串m的大小,n个元素的数目),和无序的地图从这些尺寸远远更多的碰撞受到影响。

三元树(每个子分支字符小于,等于,或在单个字符比较更大)主罚更好地实现内存最少,但尝试是迄今为止最快的。 这两种可以从boost.graph或一些其它通用图形库来构建。

分类:C# 时间:2015-03-15 人气:0
本文关键词: STL,C ++ 11
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.950 (s). 10 q(s)