哪种方法是更快的向量(插入然后排序)或集合?

Sur*_*uri 2 c++ performance stl

我有一个数字序列(未排序,没有重复),目标是对它们进行排序。

方法一:插入载体。O(n),使用排序算法和排序。O(nlogn)

方法二:插入集合。o(nlogn)

哪种方法会更快?

我觉得 set 会更快,因为 vector 中的每个插入都必须分配完整的数组元素并复制它然后删除它,这可能很昂贵。但是我通过网络阅读了大部分位置向量都已设置。

谁能建议我用正确的逻辑哪个更快?

编辑:如果我们事先不知道元素的数量,哪一个会更快设置或向量(因为元素的数量都是小而元素的数量不是大的?注意:如果元素的数量不是大的集合是更好的选择似乎但它对小也有好处吗?不知道)

qua*_*dev 5

  • 如果您事先知道要期望的许多元素,您可以reserve()在向量中的空间避免重新分配,使第一个选择非常有趣(快速插入,单一排序)。

    如果您需要执行一次,请选择std::vector<>. 如果程序稍后会发生其他插入,则std::set<>可能更有趣。

  • 如果您事先不知道预期大小,那么向量可能会发生重新分配,这std::set<>是一个不错的选择(更好的理论平均复杂度)。

    为O(n)+ O(N *的log(n))的向量 VS 为O(n *的log(n))对于该组

  • 如果元素数量很少,你仍然可以保留一些空间(例如,如果你期望 10 个元素,你可能会保留 100 个元素),并使用 std::vector

无论如何,分析这两种解决方案始终是一个好习惯,实际结果将取决于(除其他外)输入的初始排序状态以及每个容器的实现质量。

笔记:

  • 请记住std::set,如果它对您很重要,它会占用更大的内存。