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

2024-03-31

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

方法一:插入向量。 O(n),使用排序算法并排序。 O(nlogn)

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

哪种方法会更快?

我觉得设置会更快,因为向量中的每个插入都必须分配 完整的数组元素并复制它然后删除它,这可能会很昂贵。但我在网上读到大部分地方矢量都已经设置完毕。

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

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


  • 如果您提前知道许多预期要素, 你可以reserve() http://en.cppreference.com/w/cpp/container/vector/reserve向量中的空间以避免重新分配,使第一个选择非常有趣(快速插入,单一排序)。

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

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

    向量的 O(n) + O(n * log(n))vs该集合的 O(n * log(n))

  • 如果元素数量非常少,您仍然可以保留一些空间(例如,如果您期望 10 个元素,则可以保留 100 个以确保安全),然后使用std::vector

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

Note:

  • 请记住std::set有更大的内存占用,如果这对你很重要的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 使用可选参数来实现向后兼容性是一个好主意吗?

    我想知道如何通过使用可选参数来提供向后兼容性 在我的程序中 我有一个带有函数的接口 该函数在整个程序以及许多单元测试中使用 对于某些新功能 必须将布尔值传递到此函数中 如果设置为 则会改变其行为false 如果你通过true 您将得到与以前
  • R - 将数据帧转换为时间序列[重复]

    这个问题在这里已经有答案了 我有谷歌股票数据 它有两列 日期 每日数据 和 收盘价 即 Google 收盘指数 Date Close 10 11 2013 871 99 10 10 2013 868 24 10 9 2013 855 86
  • 仅使用 .wt 文件恢复 MongoDB

    我的电脑崩溃了 我可以使用 wt 文件取回我的数据吗 旧 MongoDB 中的 wt 文件 您可以恢复您的 wt从 Atlas Backup 作为恢复文件夹解压或解压 下载的 WiredTiger 文件到本地 MongoDB 首先 备份您的
  • 如何为 LinearLayout 制作渐变背景?

    我想知道 在java 而不是xml 中为LinearLayout制作渐变背景的最佳方法是什么 有任何想法吗 Thanks
  • 从类内重定向到操作的正确方法?

    背景 我有一个项目分为 Webform 和 MVC 谢天谢地 正在转向 MVC 我有一个LoginManager包含一个类IRedirectionManager类 并根据用户属性 已通过身份验证 密码过期 尚未接受条款 调用重定向管理器上的
  • 在javascript中将字符串分割成句子

    目前我正在开发一个将长列分成短列的应用程序 为此 我将整个文本拆分为单词 但目前我的正则表达式也拆分了数字 我所做的是这样的 str This is a long string with some numbers 125 000 55 an
  • 声明 C++ 不可变类的惯用方式

    所以我有一些相当广泛的功能代码 其中主要数据类型是不可变的结构 类 我声明不变性的方式是通过将成员变量和任何方法设置为 const 来 实际上是不可变的 struct RockSolid const float x const float
  • 如何通过 Java SDK 使用 AWS 端口转发会话

    我正在使用开始一个会话AWSSimpleSystemsManagementAsync如下 Map
  • VS2008 声明数组时出现预期常量表达式错误,但在 GCC 中此代码没有错误

    我有以下功能 void someFun int ar const int size int newAr size do something 我在这一行得到三个错误 Error 1 error C2057 expected constant
  • 调用 .disconnect() 后如何重新连接

    问题 发布手册后如何重新连接客户端到服务器 disconnect 在我当前的项目中 当用户从会话注销时 我需要断开客户端与服务器的连接 我做了一个socket disconnect 才能成功断开连接 服务器从会话中删除了用户 一段时间后 用
  • 如何开始使用 Selenium 2?

    我到处读到我们should现在使用 Selenium 2 如果我的理解正确的话 WebDriver 我不是在谈论 Selenium IDE 它确实很容易使用 我已经阅读了 Selenium 网站上的文档 该文档声称不完整 因为 Seleni
  • Visual Studio 扩展未知错误 - 无法推送或获取任何内容

    当我尝试通过 Visual Studio 的 Git 扩展将任何内容推送到我的 bitbucket 存储库时出现错误 Error encountered while pushing branch to the remote reposito
  • QTableView 中的搜索/查找功能

    我有一个 QWidget 里面有一个 QTableView 我需要在表格的第一列上有查找功能 因此当我单击 Ctrl F 时 会弹出一个查找对话框 class Widget QWidget def init self md parent N
  • 如何在c中增加数组

    我试图使用变量作为增量来增加 int 数组 但它会引发错误 int array MAXSIZE int n fill the array with some numbers some other code 这里的情况是 一旦我分析了前 n
  • Javascript:了解原型链

    我创建了一个简单的类 如下所示 var Class function Class prototype testObj a 2 b 3 现在如果我这样做console log Class testObj I get undefined 但是如
  • 为什么这个 c# 代码片段是合法的?

    愚蠢的问题 但是为什么下面的行会编译 int i new int 1 正如您所看到的 我没有输入第二个元素并在那里留下了逗号 即使您希望它不会编译 仍然可以编译 我想是因为 ECMA 334 标准说 array initializer va
  • 简单的 jQuery 回调在 IE 中中断

    我有几个这样的功能 this find subnav fadeIn 200 buttonHide Now 按钮隐藏 在本例中 是我在其他地方声明的函数 一旦 200ms fadeIn 完成 我想调用该函数 伟大的 适用于 FF 和 Safa
  • 带有平滑流格式 SDK 的基于 IIS 的 HLS

    我正在尝试通过 IIS 运行 HLS 并且通过 Silverlight 进行平滑流处理工作正常 但 HLS 不行 我拥有的 新的实时平滑流媒体发布点启用了 HLS 支持 通过 Smooth Streaming Format SDK 连接 P
  • 如何将 microsoft graph 365 用户个人资料照片从二进制数据转换为可读图像格式

    我已在 PHP 中使用 Microsoft Graph API 成功显示了有关管理员用户配置文件照片的信息 下面是我使用的代码
  • 向量(插入然后排序)或集合哪种方法更快?

    我有数字序列 未排序 无重复 目标是对它们进行排序 方法一 插入向量 O n 使用排序算法并排序 O nlogn 方法2 插入集合 o nlogn 哪种方法会更快 我觉得设置会更快 因为向量中的每个插入都必须分配 完整的数组元素并复制它然后