帮助我理解 boost::bind 的用法

2024-04-22

请看一下 Johannes Schaub 发布的示例,对向量对进行排序:

如何根据对的第二个元素对向量对进行排序? https://stackoverflow.com/questions/279854/how-do-i-sort-a-vector-of-pairs-based-on-the-second-element-of-the-pair/280128#280128

std::sort(a.begin(), a.end(), 
          boost::bind(&std::pair<int, int>::second, _1) <
          boost::bind(&std::pair<int, int>::second, _2));

我以为我确实理解 boost::bind,但我在这方面遇到了麻烦。

问题一:

排序算法需要谓词函数作为第三个参数。我在这里看到的是一个布尔表达式。我缺少什么?:

boost::bind(&std::pair<int, int>::second, _1) < boost::bind(&std::pair<int, int>::second, _2)

boost::bind 库是否为这两个绑定重载了operator

问题2:
这让我很困惑:

boost::bind(&std::pair<int, int>::second, _1)

通常有某种函数指针作为绑定调用的第一个参数,但这里它是类成员的地址?该特定绑定的结果是什么?

感谢您的时间和帮助


boost::bind 重载了运算符!以及关系和逻辑运算符 ==、!=、、>=、&&、||,这就是为什么您“看到”布尔表达式,但实际上返回的是函数谓词。

从那里您可以看到您正在为重载的小于函数的第一个和第二个参数绑定该对的第二个成员。

至于你的第二个问题: Boost Bind 将识别您何时将指针传递给成员并将其视为您调用了

bind<R>(mem_fun(&std::pair<int,int>::second), args);

文档是这样描述的:

使用带有指向成员的指针的绑定

指向成员函数的指针和 指向数据成员的指针不是 函数对象,因为它们不 支持运算符()。为了方便, bind 接受成员指针作为其 第一个参数,行为如下 如果 boost::mem_fn 已被用于 将成员指针转换为 函数对象。换句话说, 表达

绑定(&X::f,参数)

相当于

绑定(mem_fn(&X::f),args)

其中 R 是 X::f 的返回类型 (对于成员函数)或类型 成员(对于数据成员。)

您可以找到此信息以及更多信息here http://www.boost.org/doc/libs/1_44_0/libs/bind/bind.html#with_functions.

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

帮助我理解 boost::bind 的用法 的相关文章

  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

    我正在使用外部库 pcl 因此我需要一个不会更改现有函数原型的解决方案 我正在使用的一个函数生成一个std vector
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过

随机推荐

  • 切换div的可见性属性

    我的 div 中有一个 HTML 5 视频 然后我有一个自定义播放按钮 效果很好 我将视频的可见性设置为加载时隐藏 单击播放按钮时可见 再次单击播放按钮时如何将其恢复为隐藏 function showVid document getElem
  • 使用 linq 将数据集列表

    我有一个DataSet我想转换DataSet into List
  • 云函数在运行所有代码之前结束

    我正在尝试创建一个云函数 但它在 firebase 日志中 在执行所有任务之前显示 已完成 这是我的代码 export const count functions pubsub schedule 0 8 timeZone Europe Br
  • Node.js 中的 git 命令

    我想知道是否有人知道 进入 npm 包来使用 git 命令 我有一个nodejs项目 我想执行以下命令 克隆 git 创建分支 git pull request 来自创建的分支 我尝试了一些 npm 包但没有成功 任何帮助将不胜感激 谢谢
  • Pytest - 测试解析器错误:无法识别的参数

    我正在尝试测试一个非常简单的函数 由于多次尝试测试使用参数解析器作为参数的更复杂的函数而失败 来自 runfile py import argparse import os def get input args parser argpars
  • 扩展无法启用或安装的问题

    php 7 3 5 你好 我的扩展 ext http 有问题 composer 说我缺少 ext http 即使我在composer json 中写了这个 为什么 这就是这个确切的消息 问题1 您的系统中缺少请求的 PHP 扩展 ext h
  • 如何将 中的项目向右对齐

    我如何将下面的所有内容对齐到最右侧 div div
  • 在没有 DBCC INPUTBUFFER 的情况下获取 SQL Server 中的最后一个命令

    有没有办法在不使用的情况下获取最后执行的 SQL Server 命令DBCC INPUTBUFFER 例如 是否有包含此信息的系统视图或目录 Thanks 您可以将 SPID SQL 进程 ID 传递给以下内容 DECLARE sql ha
  • 字符串比较。如何将字符串与 std::wstring 进行比较? WRT STRCMP

    我试图比较两种我期望在某种程度上兼容的格式 因为它们通常都是字符串 我尝试使用字符串和 std wstring 执行 strcmp 并且我确信 C 专家知道 这根本无法编译 是否可以比较这两种类型 这里有简单的转换吗 你需要转换你的char
  • java:使用扫描仪类读取文本文件并将信息存储在数组中

    我有一个包含学生成绩的文本文件 例如 Kim 40 45 Jack 35 40 我试图从文本文件中读取这些数据 并使用扫描仪类将信息存储到数组列表中 任何人都可以指导我正确编写代码吗 Code import java io import j
  • Laravel 门面有依赖性吗?

    我读到 一个类不应该有太多的依赖关系 在一本书中 它指出 4 个依赖项可能表明类可能做了太多事情 假设我编写了一个使用 10 个依赖项的类 6 个类和 4 个外观 我应该只关心这 6 个类并将它们分开 还是也关心 4 个外观 如果有人想知道
  • 为什么 Jing 不允许在 id 属性中使用冒号(“:”)?

    我一直在努力反对 xsd ID 不允许在 id 属性中使用冒号 我第一次注意到这一点是在 Emacs 中使用 James Clark 的 nxml mode 时 因为它验证了我正在使用的 XHTML 文件 然后 我使用 Jing 针对 RN
  • Jquery Ajax - Tumblr API v2

    我试图深入了解 Tumblr 的黑暗世界 但无法理解如何克服以下错误 Uncaught SyntaxError Unexpected token 我相信这可能是因为我正在返回 json 但尝试使用 jsonp 这是我要发送的内容 funct
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 为什么我不能在 C# 中编写从基类到派生类的隐式运算符?

    public class Derived BaseClass public Derived string name base name public static implicit operator BaseClass Derived de
  • 如何使用 Java 从 MongoDB 读取日期(时间戳)

    我正在尝试以以下格式从 MongoDB 读取日期字段 Formate YYYY MM dd HH mm ss SSSSSS 2017 01 23 10 46 07 812000 DB2 2017 01 23T16 46 07 812Z St
  • 在 matplotlib (Python) 中使用 mplstyle 时出现错误键“axes.prop_cycle”

    当我尝试使用本地加载的外部样式表时 出现以下错误 Bad key axes prop cycle on line 270 in idt mplstyle You probably need to get an updated matplot
  • 数据模板中的数据绑定不起作用

    我有 UserControl 对多个演示文稿进行过滤 而该演示文稿又具有 ContentControl 内容是各个演示文稿之间有所不同的单独过滤控件 该方案在视觉上按预期工作 但数据绑定却不然 输出中没有数据绑定错误 DataContext
  • 对布尔值使用按位非运算符 (~) 是否会引发未定义行为?

    如果 C 程序将按位非运算符 应用于布尔值 是否会调用未定义行为 例如 以下程序定义明确吗 bool f false bool f2 f is f2 guaranteed to be true or is this UB bool t tr
  • 帮助我理解 boost::bind 的用法

    请看一下 Johannes Schaub 发布的示例 对向量对进行排序 如何根据对的第二个元素对向量对进行排序 https stackoverflow com questions 279854 how do i sort a vector