一对向量而不是向量<pair>?</pair>

时间:2012-11-04 22:30:10

标签: c++ search dictionary vector std-pair

我正在寻找一个可以实现类似于std :: map和multimap的lib,但是没有树而是向量,比如pair<vector<key>,vector<value>>。 lib必须保持向量的同步和排序。

我想比较地图的性能vector<pair<key,value>>和这样的lib。我不会尝试制作一般的基准测试,我只希望我的应用程序更快。

我可以像其他人一样使用地图,但是 - 我知道我在谈论 - 我担心有太多缓存未命中。我的野心,没有受过教育的猜测是,我的应用程序,少数几个,分组插入和许多分散的搜索,将受益于更紧凑和连续的键。

事实上,如果我要编写代码,我会用两个类来完成。一个未分类的版本,只允许快速的push_back插入,然后转换为一个排序版本,它将采用未排序的版本,对其进行排序,可能检查是否存在重复,然后允许快速搜索和较慢的排序插入。这实际上是Scott Meyers的有效STL第23项:“考虑用有序向量替换关联容器”。

编辑正如Boost关于flat_(multi)map/set的文档所指出的,Matt Austern,而不是Scott Meyers首先建议用向量替换地图和集合:http://lafstern.org/matt/col1.pdf

2 个答案:

答案 0 :(得分:2)

也许你看起来像Boost.Container中的flat_(multi)map/set

答案 1 :(得分:0)

您应该查看std::make_heap和相关函数,它们将集合作为已排序堆进行管理。它几乎完全符合您对快速,未排序插入的要求,以及从已排序的集合中快速检索。