Java 有一个 LinkedHashSet ,这是一个具有可预测迭代顺序的集合。 C++ 中最接近的可用数据结构是什么?
目前我正在使用集合和 vector 复制我的数据。我将我的数据插入集合中。如果数据插入成功(意味着数据尚未存在于集合中),那么我将 push_back 到 vector 中。当我遍历数据时,我使用 vector 。
最佳答案
如果你可以使用它,那么一个Boost.MultiIndex带有 sequenced
和 hashed_unique
索引的数据结构与 LinkedHashSet
相同。
否则,保留一个包含列表节点的某种类型的 unordered_set
(或 hash_set
,如果这是您的实现所提供的),并自己处理顺序使用该列表节点。
您当前正在做的事情(set
和 vector
)存在的问题是:
- 数据的两个拷贝(当数据类型很大时可能会出现问题,这意味着您的两个不同的迭代返回对不同对象的引用,尽管具有相同的值。这将是如果有人编写了一些代码来比较以两种不同方式获得的“相同”元素的地址,期望地址相等,或者如果您的对象具有被忽略的
mutable
数据成员,则会出现问题顺序比较,有人编写的代码希望通过查找进行变异,并在按顺序迭代时查看变化)。 - 与
LinkedHashSet
不同,没有快速删除序列中间元素的方法。如果您想按值而不是按位置删除,则必须在 vector 中搜索要删除的值。 set
具有不同于哈希集的性能特征。
如果您不关心这些事情中的任何一个,那么您所拥有的可能就很好。如果重复是唯一的问题,那么您可以考虑保留指向集合中元素的指针 vector ,而不是重复 vector 。
关于c++ - C++ 中是否有链接哈希集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799830/