c++ - std::set<T>::insert,重复元素

标签 c++ data-structures stl set

什么是 std::set 插入成员函数的有效实现?因为数据结构基于 std::less 对元素进行排序(需要为元素类型定义运算符 <),所以在概念上很容易检测到重复项。

它实际上是如何在内部运作的?它是否使用红背树数据结构(Josuttis 书中提到的实现细节)?

标准数据结构的实现可能会有所不同...

我有一个问题,我被迫拥有一组(一般来说)应该是唯一的整数。集合的长度各不相同,因此我需要动态数据结构(根据我的狭隘知识,这将范围缩小到列表、集合)。元素不一定需要排序,但可能没有重复项。由于候选集总是有很多重复项(集合很小,最多 64 个元素),与 std::list 和其他算法相比,尝试使用 insert 成员函数将重复项插入 std::set 会导致大量开销那可能不会求助于对元素进行排序?

附加:输出集的大小固定为 27 个元素。对不起,我忘了这个......这适用于问题的特殊情况。对于其他情况,长度是任​​意的(低于输入集)。

最佳答案

如果您一次创建整个集合,您可以尝试使用 std::vector 来保存元素,使用 std::sort 来对它们进行排序,和 std::unique删除重复项。

关于c++ - std::set<T>::insert,重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516956/

相关文章:

c - 从队列中弹出时 C 中的段错误

c++ - std::string operator[] 如何返回引用而不是字符?

python - Python 的列表方法 append 和 extend 有什么区别?

c++ - VSE(visual studio enterprise)2015 上的 C++ 中的 ShellExecute 不起作用

javascript - 如何将嵌套的 JSON 数据结构缩减为 map JavaScript

c++ - Visual Studio 2010 和 2012 中 STL 容器字节大小的差异

c++ - 有没有人有 STL 算法的包装器,将一个容器而不是两个迭代器作为第一个参数?

c++ - 从真值的 STL vector 中随机选择索引

c++ - 如何更快地读取多个文件?

c++ - 来自基类 c++ 的可互换派生类方法