【发布时间】:2012-09-17 12:41:18
【问题描述】:
我正在设计我的程序的核心,并有各种实体,我目前循环调用update()。我有大约十个 vectors 包含我的对象,尽管将来这可能会增长到更大的数量。我刚刚意识到我需要定期通过id 查找这些内容,因此我不得不遍历所有元素以查找正确的 id。
我正在考虑创建一个包含id 以及指向对象本身的指针的hashmap。这是最有效的方法吗? id 是半随机的,尽管它们只会在整个程序中增加,每个列表中的每个元素都有一个唯一的 id(每次分配一个 id 计数器都会增加)。向量中的元素现在经常被删除和添加。除了在 java 中的一小部分之外,我对 hashmap 的工作并不多,所以我不确定这是否是一条有效的途径。我相信代码仍然是可读的,但是除了 hash_map 之外还有什么更适合这个的选项吗?谢谢
【问题讨论】:
-
这将有 O(1) 的查找时间,但不会像保持向量按 id 排序并使用二进制搜索那样节省内存。如果内存开销是一个问题,您可能想看看Boost.Container 的
flat_map<>。 -
The elements in vectors now get removed and added often-- 这可能意味着将这些对象保留在向量中并不理想,除非您总是从向量的最末端移除。 -
@SevaTitov 我无法确定它们能持续多久,进出的吞吐量很大。一些早期的可能会持续几个小时,一些早期的可能会持续几秒钟。它认为拥有一个大向量并迭代所有空元素以试图减少这种情况是不可行的,因为迭代通常每秒发生 10->100 次。不过,我对效果并不积极(总是在学习),所以你可能会有所收获。