使用容器中的第 n 个元素,但使用另一个键

2023-12-04

我有两个向量。一种实际保存数据(假设是浮动),另一种保存索引。我想通过nth_element索引向量,但我希望通过实际保存数据的向量来完成比较。我正在考虑一个函子,但我猜这仅提供了 () 运算符。我通过将数据向量设为全局向量来实现这一目标,但这当然不是我们所希望的。

std::vector<float> v;                                   // data vector (global)
bool myfunction (int i,int j) { return (v[i]<v[j]); } 

int find_median(std::vector<int> &v_i)
{
    size_t n = v_i.size() / 2;
    nth_element(v_i.begin(), v_i.begin()+n, v_i.end(), myfunction);
    return v_i[n];
}

您可以使用如下函子:

class comp_with_indirection
{
public:
    explicit comp_with_indirection(const std::vector<float>& floats) :
        floats(floats)
    {}

    bool operator() (int lhs, int rhs) const { return floats[lhs] < floats[rhs]; }

private:
    const std::vector<float>& floats;
};

然后你可以像这样使用它:

int find_median(const std::vector<float>& v_f, std::vector<int> &v_i)
{
    assert(!v_i.empty());
    assert(v_i.size() <= v_f.size());

    const size_t n = v_i.size() / 2;
    std::nth_element(v_i.begin(), v_i.begin() + n, v_i.end(), comp_with_indirection(v_f));
    return v_i[n];
}

注意:在 C++11 中,您可以使用 lambda 代替命名函子类。

int find_median(const std::vector<float>& v_f, std::vector<int> &v_i)
{
    assert(!v_i.empty());
    assert(v_i.size() <= v_f.size());

    const size_t n = v_i.size() / 2;
    std::nth_element(
        v_i.begin(), v_i.begin() + n, v_i.end(),
        [&v_f](int lhs, int rhs) {
            return v_f[lhs] < v_f[rhs];
        });
    return v_i[n];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用容器中的第 n 个元素,但使用另一个键 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 如何从 SQL Server 中的 URL 读取 JSON 数据

    我正在尝试使用以下代码从 SQL Server 2008 中的 URL 读取 JSON 数据 DECLARE temp table RowNum int DATA NVARCHAR max DECLARE url VARCHAR MAX w
  • ruby on Rails 中的 Bootstrap 模式不工作(不显示)

    我正在使用 Rail4 和 bootstrap sass 3 3 6 我已按照以下步骤操作https coderwall com p ej0mhg open a rails form with twitter bootstrap modal
  • R 中一页上的多个绘图

    如何在 R 上的一个 pdf 页上绘制 7 个不同的图表 我目前使用的是matplot 它似乎没有这个选项 我需要根据数据列绘制数据列 我最初尝试使用点阵库来做到这一点 但我似乎无法弄清楚如何绘制数据列 好像想要一个功能 要创建绘图的 pd
  • 检测 __getattribute__ 调用是否是由于 hasattr

    我正在重新实施 getattribute 为了一堂课 我想注意到提供属性的任何不正确 当然意味着失败是预料之中的 失败 因为 getattribute 实施结果相当复杂 为此 如果我的代码在引发之前无法找到 提供该属性 我会记录一条警告At
  • 估计/计算内存中对象大小的好方法

    假设我有对象 Tom 它有类 Person Class Person String Name DateTime BirthDate String Role Int32 Salary 如果它具有以下值 您能否给我它的内存大小的近似值 名字 汤
  • 是否有任何指南或工具可将 JMeter .jmx 文件转换为 Karate DSL 功能文件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何工具或指南可用于将 JMeter jmx 文件转换为空手道 DSL feature 文件 我们有一个大尺寸的 jmx 文件 我想将其转换为
  • boost::asio 与 no_delay 不可能吗?

    我知道的 我需要打电话set option tcp no delay true before connect 根据https stackoverflow com a 25871250否则没有效果 此外 set option 仅当套接字事先打
  • Java BC SicBlockCipher直接输出等价于c#

    我正在用 C 实现一些东西 对此我有一个单独的规范 并且对我需要做什么有相当清楚的了解 但同时作为参考 我有一个 Java 实现 并且希望在本例中遵循 Java 实现 如下所示尽我所能 该代码涉及加密流 Java 源代码是here相关行在这
  • eclipse打开excel文件出错

    我收到以下错误 无法创建就地编辑器 这可能是因为没有 针对类型注册的 OLE 编辑器 您尝试打开的文件的名称 创建 Ole 客户端失败 结果 2147417851 我有MS Office 2007 Excel文件存储为 另存为2003版本
  • 如何将 ctypes 指针转换为 Python 类的实例

    假设您有以下 C 代码 typedef void PythonCallbackFunc void userData void cb PythonCallbackFunc pcf void userData pcf userData 以及以下
  • PHP 文件不写入当前目录?

    我在网络主机上有一个 PHP 文件 如下所示 但文件test txt当我从浏览器执行页面时不会创建 为什么不 是权限问题吗 是的 PHP 文档说 如果文件名不存在 则创建该文件 否则 现有文件将被覆盖 除非设置了 FILE APPEND 标
  • keytool 错误:java.lang.Exception:必须指定 -keyalg

    我正在尝试创建密钥对 并从 Windows 命令行提示符 使用 Windows 10 JDK 14 将它们存储在密钥存储中 这是我正在输入的命令 keytool genkey alias chris keystore chirskeysto
  • 异步/等待与线程

    在 Net 4 5 中 微软添加了新的Async Await简化异步编码的功能 然而 我想知道 Can Async Await完全取代旧的使用方式Threads Is Async Await有能力做任何事Thread可以做 异步 Can A
  • CakePHP - 创建一个编辑同一模型的多行的表单

    我正在尝试构建一个由属于主题组的主题组成的表单 从视觉上看 主题显示在页面上每个主题组标题下 您将能够编辑主题组或单个主题的名称 如果我给你一个 HTML 的例子 div class heading div
  • 找不到元素“赋值”的声明

    所以我从 XML 和模式开始 今天我遇到了这个 但我还没能弄清楚 我收到错误消息 Ln 5 Col 2 找不到 元素 赋值 的声明 我相信我已经声明了该元素 但也许我遗漏了一些东西并且没有声明 这是我的 XML 文件
  • 如何正确使用线性渐变?

    我对 CSS3 还很陌生 我的项目的 CSS 文件中有以下样式 headerDiv background image linear gradient 04519b 044687 60 033769 我很清楚什么linear gradient
  • Watson 检索和排名 - 手动排名

    我正在尝试建立一个排名器进行演示 我进行了 自动训练 并且得到了不错的结果 可能会更好 我正在尝试进行手动训练 但我对 Bluemix 在线文档中参数的含义感到困惑 https www ibm com watson developerclo
  • PayPal 沙盒错误:Cookie 被阻止

    我正在使用贝宝沙箱帐户 一切正常 但是 现在它显示以下错误 cookie 已启用 我尝试使用不同的浏览器和不同的计算机 我仍然遇到同样的错误 我尝试清除cookies和缓存 但这没有用 有什么解决办法吗 请开启cookies以结帐 这是 P
  • Rails 4 模型始终返回 nil

    我对以下错误感到疯狂 我有一个 User 类 它的两个属性 生日和created at gt datetime 总是返回nil 除了它在数据库上有一个值 我正在使用设备来管理身份验证 这是数据库表 CREATE TABLE users id
  • 使用容器中的第 n 个元素,但使用另一个键

    我有两个向量 一种实际保存数据 假设是浮动 另一种保存索引 我想通过nth element索引向量 但我希望通过实际保存数据的向量来完成比较 我正在考虑一个函子 但我猜这仅提供了 运算符 我通过将数据向量设为全局向量来实现这一目标 但这当然