【发布时间】:2012-10-24 18:53:08
【问题描述】:
我正在寻找一个可以实现类似于 std::map 和 multimap 的库,但没有树,而是向量,例如 pair<vector<key>,vector<value>>。该库必须保持向量同步和排序。
我想比较地图的性能,vector<pair<key,value>> 和这样的库。我不打算做一个通用的基准测试,我只想要对我的应用程序更快的东西。
我可以像其他人一样使用地图,但是-我不知道我在说-我担心太多的缓存未命中。我粗心大意的猜测是,我的应用程序只做很少的分组插入和许多分散的搜索,会受益于更紧凑和连续的键。
事实上,如果我要编写代码,我会使用两个类来完成。一个未排序的版本,只允许快速的 push_back 插入,然后转换为排序的版本,该版本将采用未排序的版本,对其进行排序,可能检查重复性,然后允许快速搜索和较慢的排序插入。这实际上是 Scott Meyers 的 Effective STL 的第 23 条:“考虑用排序的向量替换关联容器”。
编辑:正如 Boost 关于 flat_(multi)map/set 的文档所指出的那样,Matt Austern 而不是 Scott Meyers 首先建议用向量替换地图和集合:http://lafstern.org/matt/col1.pdf
【问题讨论】:
-
我查看了 boost::zip_iterator,但无法使用 zip_iterator 对两个向量进行排序():stackoverflow.com/questions/9343846/…
标签: c++ search dictionary vector std-pair