3

我想从一个 seach 函数中保存一组迭代器。是否有“更好的方法”来保存一组迭代器(数组与集合)。就内存效率而言,每种方法的优缺点是什么?

谢谢。

4

3 回答 3

6

在不了解您要完成的工作的情况下谈论哪个更好的数组或集合是没有意义的。

您应该考虑一个考虑因素:迭代器指向的容器类型,以及该容器是否应该被更新?

例如,如果您将迭代器存储到向量中(无论您将这些迭代器放在哪里),并且您更新了向量,则先前存储的迭代器可能无效。存储迭代器时要非常小心。

听起来您正在缓存结果以提高速度。如果您需要缓存结果,最好使用无序容器之一。对搜索结果使用与缓存相同的键。不要存储迭代器,只存储查询键和实际结果。unordered_set 具有 O(1) 查找时间,并且它们不会占用太多空间,因为它们散列键并存储结果。

于 2012-07-16T15:11:48.167 回答
2

Set 仅包含唯一对象http://en.cppreference.com/w/cpp/container/set

于 2012-07-16T14:46:25.043 回答
0

在内存方面,两者在空间效率上并没有太大的区别。但是,需要考虑的是,set您的条目将被排序,但您array将按照您放入的顺序保留它们。您set也不允许您存储重复项。根据您的用例,可能会为您提供更好的运行时间或性能。

此外,需要考虑的是您使用的是基本array的还是vector; 它vector是 C++ 的 wrap array,使其可重新调整大小,允许插入、删除和处理内存分配以增加array. 如果您希望您的数组大小发生变化,这将是一个很好的优化。

于 2018-06-22T16:12:12.003 回答