【发布时间】:2013-10-03 12:21:40
【问题描述】:
我想实现一个代表抽象数据类型"cover of a set"的数据结构。集合的元素由整数索引表示,子集也是如此。每个元素uint64_t e 被分配到至少一个但可能是多个子集uint64_t s。这可以通过将子集索引存储在std::vector 中来实现。任何元素将被分配到的子集的数量通常远小于元素的总数。
性能(时间和内存)很重要,那么您会推荐哪种实现方式?
std::vector<std::vector<uint64_t>>std::vector<std::unordered_set<uint64_t>>std::vector<std::set<uint64_t>>- 还有什么?
常用操作包括:
- 将元素分配给子集
- 从子集中删除一个元素(并可能将其移动到另一个)
- 检查元素是否是特定子集的成员
- 获取元素所属的所有子集
- 对特定子集的所有元素进行高效迭代会很好,但我认为这与其他目标相冲突
【问题讨论】:
-
性能取决于您要对此数据结构执行的操作。请提供有关您的用例的更多信息。
-
@nosid 增加频繁操作。
标签: c++ data-structures c++11 set