在c++中使用集合与使用数组

Using a set vs usings an array in c++

本文关键字:数组 集合 c++      更新时间:2023-10-16

我想保存一组seach函数的迭代器是否有"更好的方法"来保存一组迭代器(数组与集合)。在内存效率方面,每种方法的优缺点是什么

谢谢。

在不了解您想要实现的目标的情况下,谈论哪个是更好的数组或集合是没有意义的。

您应该考虑一个问题:迭代器指向什么样的容器,该容器是否需要更新?

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

这听起来像是为了速度而缓存结果。如果您需要缓存结果,那么最好使用一个无序的容器。对搜索结果使用与缓存相同的关键字。不要存储迭代器,只存储查询键和实际结果。无序集合具有O(1)查找时间,并且它们在散列密钥和存储结果时不会占用太多空间。

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

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

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