在C++中是否有链接的哈希集?

Vic*_*sky 8 c++ set

Java有一个LinkedHashSet,它是一个具有可预测迭代顺序的集合.C++中最接近的可用数据结构是什么?

目前我正在使用set和vector复制我的数据.我将数据插入到集合中.如果数据插入成功(意味着数据尚未出现在集合中),那么我将push_back插入向量.当我遍历数据时,我使用向量.

Ste*_*sop 7

如果你可以使用它,那么带有和索引的Boost.MultiIndex与数据结构相同.sequencedhashed_uniqueLinkedHashSet

如果失败了,请保留一个unordered_set(或者hash_set,如果这是您的实现提供的)某种类型的列表节点,并使用该列表节点自己处理顺序.

您目前正在做的事情(setvector)的问题是:

  • 两个数据副本(当数据类型很大时可能是一个问题,这意味着你的两个不同的迭代返回对不同对象的引用,虽然具有相同的值.如果有人编写了一些比较的代码,这将是一个问题.期望地址相同的"相同"元素的地址,或者如果您的对象具有mutable被订单比较忽略的数据成员,并且有人编写希望通过查找进行变更的代码并查看更改时按顺序迭代).
  • 与之不同LinkedHashSet,没有快速的方法来删除序列中间的元素.如果要按值而不是按位置删除,则必须在向量中搜索要删除的值.
  • set 具有与散列集不同的性能特征.

如果你不关心任何这些事情,那么你所拥有的可能就好了.如果重复是唯一的问题,那么你可以考虑保留一组指向集合中元素的指针,而不是重复的向量.