搜索和排序向量的最快方法

2023-11-27

我正在做一个项目,其中我需要将数据插入向量中,对其进行排序并搜索......

我需要最快的排序和搜索算法...我一直在搜索并发现 std::sort 基本上是快速排序,这是最快的排序之一,但我无法弄清楚哪种搜索算法是最好的?二分查找??你能帮我吗? tnx ...所以我有3种方法:

void addToVector(Obj o)
{
  fvector.push_back(o);
}

void sortVector()
{
  sort(fvector.begin(), fvector().end());
}

Obj* search(string& bla)
{
 //i would write binary search here
 return binarysearch(..);
}


  • 我一直在寻找并发现std::sort基本上是 快速排序。

    Answer: Not quite. Most implementations use a hybrid algorithm like introsort, which combines quick-sort, heap-sort and insertion sort.

    块引用>

  • Quick-sort is one of the fastest sorting methods.

    Answer: Not quite. In general it holds (i.e., in the average case quick-sort is of enter image description here complexity). However, quick-sort has quadratic worst-case performance (i.e., enter image description here). Furthermore, for a small number of inputs (e.g., if you have a std::vector with a small numbers of elements) sorting with quick-sort tends to achieve worst performance than other sorting algorithms that are considered "slower" (see chart below):

enter image description here


  • I can't figure out which searching algorithm is the best. Is it binary-search?

    Answer: Binary search has the same average and worst case performance (i.e., enter image description here). Also have in mind that binary-search requires that the container should be arranged in ascending or descending order. However, whether is better than other searching methods (e.g., linear search which has enter image description here time complexity) depends on a number of factors. Some of them are:

    1. 元素/对象的数量(见下图)。
    2. 元素/对象的类型。

enter image description here


底线:

  • 通常寻找“最快”算法表示过早优化,并根据“伟大的算法”之一(过早的优化是万恶之源——唐纳德·高德纳)。正如我希望已经清楚地表明的那样,“最快”取决于很多因素。

  • Use std::sort对你的进行排序std::vector.

  • 对你的排序后std::vector use std::binary_search找出某个元素是否存在于您的std::vector or use std::lower_bound or std::upper_bound从您的中查找并获取元素std::vector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搜索和排序向量的最快方法 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Rx.NET 中是否有一个Subject 实现,其功能类似于BehaviourSubject,但仅在值发生更改时才发出?

    有没有Subject https learn microsoft com en us previous versions dotnet reactive extensions hh229699 v vs 103 Rx NET 中的实现在功能
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • HTML:如何创建“另存为”按钮?

    在浏览器中 当您想要保存当前正在查看的 HTML 页面时 通常会转到 文件 菜单并单击 另存为 我可以在 HTML 页面底部添加一个具有相同功能的小按钮吗 因此 我希望我的用户能够单击按钮将页面保存到磁盘上 而不是转到 文件 菜单 gt 另
  • EF Core 2.0 Identity - 添加导航属性

    在 EF Core 2 0 中 默认情况下不包含 Identity 导航属性 因此在升级后 我添加了它们 因此 对于用户和角色之间的多对多关系以及角色和 RoleClaim 之间的一对多关系 我添加了以下导航属性 public class
  • 如何扩展Spring注解@Transactional

    我必须在我的网络应用程序中使用 3 个不同的事务管理器 所以我根据以下内容编写了自己的注释弹簧参考 第 10 5 6 3 节自定义快捷方式注释 一个注释 用于使用一个特定的事务管理器 如下所示 import java lang annota
  • 使用 PHP 删除文件夹中的所有文件?

    例如 我有一个名为 Temp 的文件夹 我想使用 PHP 删除或刷新该文件夹中的所有文件 我可以这样做吗 files glob path to temp get all file names foreach files as file it
  • Numpy 融合乘法和加法以避免浪费内存

    是否可以将两个 ndarray A 和 B 相乘并将结果添加到 C 而无需为 A 乘以 B 创建一个大型中间数组 Numpy 对于 C A 乘 B 的情况有 out 关键字参数 numpy multiply A B out C C A 乘以
  • SQL Server SORT 顺序与 ASCII 代码顺序不对应

    我正在使用 SQL Server 2012 并且我有一个数据库SQL Latin1 General CP1 CI AS整理 create table testtable c nvarchar 1 null insert into testt
  • 通过 USB 安装应用程序 [安装被用户取消]

    我可以通过 USB 将应用程序安装到我的 Android 设备上 但是 当 Android 上显示允许 拒绝安装弹出窗口时 我错误地单击了 拒绝 并选中了 记住我的选择 现在 每次尝试通过 USB ADB 安装应用程序都失败并出现错误com
  • UrlHelper.GenerateUrl 的 ASP.NET MVC 公共替代方案

    我想在我的页面中嵌入一个指向控制器操作的链接 以便我可以从 javascript 使用它 就像是 var pollAction Mycontroller CheckStatus 现在我很高兴对其进行硬编码 但如果有一种可以用来创建 URL
  • python中的快速寻峰和质心

    我正在尝试用 python 开发一种快速算法 用于查找图像中的峰值 然后找到这些峰值的质心 我使用 scipy ndimage label 和 ndimage find objects 编写了以下代码来定位对象 这似乎是代码中的瓶颈 在 5
  • Pojo 到 xsd 生成

    是否有一个库可以从 java 类生成 xsd 模式 Google 产生了很多相反的结果 来自 xsd 的 java 类 JAXB 2 0 允许您从带注释的 Java 类创建 XML 模式 您可以在以下位置找到一些示例AMIS 博客并在Jav
  • 如何在 iOS 推送通知上增加徽章

    我目前正在从有效负载中获取徽章 但我怎样才能更新这个值 aps alert Notification Hub test notification2 badge 1 sound Default 当我发送此消息时 徽章编号中始终显示 1 但是当
  • 批处理参数 %~s1 给出了错误的 8.3 短名称

    我正在尝试在 Windows XP 中编写一个批处理文件 该文件接受完全限定的路径名 并输出 8 3 短名称版本 echo off echo s1 我遇到过一种特殊情况 它输出不正确的路径和文件 C gt test bat C Docume
  • Angular-ui + D3:如何实现上下文菜单(弹出框与模式)?

    给出以下用例 我使用 D3js 来渲染由 AngularJS 管理的对象 我想为 D3 图表添加交互性 当单击 svg 元素时 我希望有一种弹出菜单 允许修改对象属性 这些属性是 AngularJS 所必需的 但 D3 不会呈现 D3 An
  • sys.path 与 $PATH

    我想从 python 程序内部访问 PATH 变量 到目前为止我的理解是 sys path 给出了 Python 模块搜索路径 但我想要的是 PATH 环境变量 有没有办法从Python内部访问它 为了提供更多背景知识 我最终想做的是找出用
  • 为什么“using”作用域可以在 Start-Job 本地工作,但不能与 Invoke-Command 一起工作?

    为什么 PowerShell 不允许使用using使用时范围Invoke Command本地 根据文档 the using修饰符只能用于远程命令 去引用 从 PowerShell 3 0 开始 您可以使用Using范围修饰符来标识远程命令中
  • 使用 rmongodb 在 R 中运行高级 MongoDB 查询

    由于 MySQL 让我抓狂 我试图让自己熟悉我的第一个 NoSQL DBMS 而它恰好是MongoDB 我通过以下方式连接到它rmongodb 我玩得越多rmongodb 关于运行高级查询的疑问 问题就越多 首先 我先展示一些示例数据 然后
  • Linux ldd 中的“静态链接”和“不是动态可执行文件”有什么区别?

    考虑这个 AMD64 汇编程序 globl start start xorl edi edi movl 60 eax syscall 如果我编译它gcc nostdlib并运行ldd a out 我明白了 statically linked
  • Swift 为什么退格键的 strcmp 返回-92?

    我试图检测 UITextfieldDelegate 内部的退格键 并找到了这个答案 https stackoverflow com a 49294870 911528 并且它工作正常 但我不知道这个函数内部发生了什么 let char st
  • 核心数据应用程序因“controllerWillChangeContent:无法识别的选择器发送到实例”而崩溃

    我有一个具有 2 个视图的核心数据应用程序 第一个视图列出 房间 第二个视图列出房间中的 场景 Rooms 页面有一个编辑 NavItem 按钮 按下该按钮会启用添加 NavItem 按钮 您可以从此处删除和添加房间 添加的房间仅在表格中显
  • 搜索和排序向量的最快方法

    我正在做一个项目 其中我需要将数据插入向量中 对其进行排序并搜索 我需要最快的排序和搜索算法 我一直在搜索并发现 std sort 基本上是快速排序 这是最快的排序之一 但我无法弄清楚哪种搜索算法是最好的 二分查找 你能帮我吗 tnx 所以