对于小集合或地图,使用排序向量通常要快得多,而不是基于树的set
/map
--特别是对于5-10个元素。LLVM有一些类本着这种精神,但没有真正的适配器提供像std::map
那样的带有std::vector
备份的接口。
有(免费)实现这一点吗?
编辑:谢谢你提供的所有其他想法,但我真的对基于向量的集/映射感兴趣。我确实有一些特殊的例子,我倾向于创建大量的集合/地图,这些集合/地图通常包含的元素少于10个,而且我确实希望减少记忆压力。例如,考虑到三角形网格中顶点的近邻边,您很容易得到100k组的3-4个元素。
发布于 2009-02-24 15:41:29
我只是偶然发现了你的问题,希望不会太晚。
我推荐一个很好的(开源)库,名为洛基。它有一个基于向量的关联容器实现,它是std::map的插入替代,称为AssocVector。
它为访问元素提供了更好的性能(插入/删除的性能最差)。
这个库是由亚历山大斯库编写的,“现代C++设计”的作者。
它还包含了其他一些非常漂亮的东西。
发布于 2009-01-16 20:27:16
如果找不到合适的东西,我只需包装std::vector ()来对insert执行排序(),然后使用lower_bound()实现find()。它应该是直截了当的,并且和自定义解决方案一样有效。
发布于 2016-11-28 13:27:46
我知道,以前的帖子,但对于最近的访问者来说,Boost的flat_set和flat_map看上去就像你所需要的。有关详细信息,请参阅https://theboostcpplibraries.com/boost.container。
https://stackoverflow.com/questions/449940
复制相似问题