在boost中定义斐波那契堆的比较函数

2023-11-24

我需要在我的项目中使用斐波那契堆,并且我正在尝试从 boost 库使用它。但我无法弄清楚如何为任意数据类型设置用户定义的比较函数。我需要为结构节点构造一个最小堆,定义如下:

struct node
{
    int id;
    int weight;
    struct node* next;
                 /* dist is a global array of integers */
    bool operator > (struct node b)                                 //Boost generates a Max-heap. What I need is a min-heap.
            {return dist[id]   < dist[b.id] ? 1:0  ;}               //That's why "<" is used for "operator >".
    bool operator < (struct node b)
            {return dist[id]   > dist[b.id] ? 1:0 ;}
    bool operator >=(struct node b)
            {return dist[id]   <= dist[b.id] ? 1:0 ;}
    bool operator <=(struct node b)
            {return dist[id]   >= dist[b.id] ? 1:0 ;}

    node()
    {
            id=0;
            weight=0;
            next=NULL;
    }

};

我查了一下文档,有一个比较类。但它不包含任何元素。请告诉我如何设置用户定义的比较函数。 先感谢您。


fibonacci_heap进行比较functor,这实际上是一个struct or class使用函数调用运算符 -operator()。我将简化你的nodestruct,但您应该能够通过较小的修改来使用它:

struct node
{
    int id;

    node(int i)
      : id(i)
    { }
};

现在,我们需要定义一个类来比较nodes。这将有一个operator()通过 const 引用获取 2 个节点,并返回一个bool:

struct compare_node
{
    bool operator()(const node& n1, const node& n2) const
    {
        return n1.id > n2.id;
    }
};

然后我们可以如下声明我们的堆:

boost::heap::fibonacci_heap<node, boost::heap::compare<compare_node>> heap;

一个完整的例子:

#include <boost/heap/fibonacci_heap.hpp>

#include <iostream>

struct node
{
    int id;

    node(int i)
      : id(i)
    { }
};

struct compare_node
{
    bool operator()(const node& n1, const node& n2) const
    {
        return n1.id > n2.id;
    }
};

int main()
{
    boost::heap::fibonacci_heap<node, boost::heap::compare<compare_node>> heap;
    heap.push(node(3));
    heap.push(node(2));
    heap.push(node(1));

    for(const node& n : heap) {
        std::cout << n.id << "\n";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在boost中定义斐波那契堆的比较函数 的相关文章

  • 结构体如何存储在内存中?

    我有一个struct iof header在我的代码中 我确定它的宽度是 24 字节 我执行 sizeof iof header 它返回 32 字节宽 问题1为什么是 32 字节宽而不是 24 字节宽 问题2包括其成员在内 结构体如何存储在
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 如何将 Q 格式整数转换为浮点数(反之亦然)?

    我四处搜寻 找不到一个很好的问题来回答这个问题 给定一个整数 使用Q Format https en wikipedia org wiki Q number format 如何将该数字转换为普通浮点类型 反之亦然 如何将浮点类型转换为Q F
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • Type.GetInterfaces() 仅适用于声明的接口

    首先 像这样的问题有很多 也许有些OP甚至在问同样的问题 问题是这些问题的答案 无论是否接受 都没有真正回答这个问题 至少我找不到 如何确定类直接声明的接口 而不是由父级或声明的接口继承的接口 e g interface I interfa
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何检测应用程序正在运行的 .NET 版本?

    我尝试使用Environment Version ToString 确定目标计算机上正在使用什么 NET 框架 但安装了 4 0 版本时 它说我正在使用 NET 2 0 如何检测目标计算机上正在运行的 NET Framework 版本 En
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • Boost.asio和异步链,unique_ptr?

    我对异步编程不太熟悉 我有一个问题 我的问题如下 给出 boost asio 中 C 11 的 echo server 示例 http www boost org doc libs 1 60 0 doc html boost asio ex
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 在 JavaScript 中定义“嵌套”对象构造函数?

    是否可以在另一个对象中定义一个对象 我在想这样的事情 function MyObj name this name name function EmbeddedObj id this id id 然后我可以创建一个 EmbeddedObj 如
  • Rails 4 中的 form_for 参数数量错误

    我正在使用 form for 标签 它在 Rails 3 0 4 环境中工作 但是当我尝试将项目更新到 Rails 4 时 出现以下错误 参数数量错误 3 对 2 这是我的代码 尝试删除可能试图改变视图中的内容的内容 就我而言 问题在于cl
  • 如何将计算列添加到我的 EF4 模型?

    给定 MS SQL 2008 中的 用户 表和 登录 表 CREATE TABLE dbo User User UserID int IDENTITY 1000 1 NOT NULL UserName varchar 63 NOT NULL
  • 如何解决读取问候语数据包时出现错误?

    我正在尝试连接到 NetBeans 中的服务器 我写的代码如下 运行此代码会返回此错误 wlecome Warning mysqli connect MySQL server has gone away in C xampp htdocs
  • C 和 C++ 中的 static 和 extern 全局变量

    我制作了 2 个项目 第一个项目使用 C 语言 第二个项目使用 C 语言 两者都具有相同的行为 C项目 header h int varGlobal 7 main c include
  • 在 C++ 中,如何在运行时获取给定元素的模板类型?

    我正在设计一个简单的Array类能够保存任何类型的对象 就像一个向量可以在一个对象中保存多种类型的数据 这是为了学习目的 我有一个名为的空基类Container class Container 还有一个名为的模板化子类Object temp
  • Flex 项目在 Chrome 和 IE11 中重叠

    我正在尝试创建一个固定高度的 Flexbox 布局 当内部内容太大时 它会滚动内部内容 另外 如果内容不会导致滚动 我想修复一个带有按钮的 div 到容器底部 我有一个在 Firefox 中完美运行的布局 但在 Chrome 中 当底部按钮
  • 替换单列值

    如何替换数据框单列中的值 例如 dataz 列中的所有 0 值均变为 1 datay dataz 1 0 100 2 2 101 3 3 102 4 4 103 5 10 0 6 11 0 7 0 0 8 0 0 9 0 0 10 12 1
  • 检查函数参数的最佳方法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我正在寻找一种有效的方法来检查 Python 函数的变量 例如 我想检查参数类
  • TaskCancellationException 如何避免成功控制流上的异常?

    在我们的应用程序中 我们大量使用异步 等待和任务 因此 它确实大量使用 Task Run 有时使用内置的取消支持CancellationToken public Task DoSomethingAsync CancellationToken
  • 使用二叉索引树进行 RMQ 扩展

    The RMQ问题可以这样扩展 给定的是一个数组n整数A 查询 x y 给定两个整数 1 x y n 找到最小值A x A x 1 A y 更新 x v 给定一个整数v且 1 x n do A x v 这个问题可以解决O log n 对于这
  • 当我为 Android RatingBar 使用自定义星星时,对于低于 0.5 的小数值始终显示半星

    我查了很多帖子 例如Android RatingBar更改星星颜色 更改评级栏中星星的颜色 其中评级栏是在android中动态创建的 如何设置评分栏的星星颜色 以更改评级栏中星星的颜色 我关注了这些帖子 并且能够更改自定义评级栏的星星 但在
  • HTML5 视频上一个 - 下一个和自动播放

    我是这个网站的新手 也是 HTML5 和 Javascript 的新手 并不是说我是初学者 当我看到它时 我有点了解 HTML5 和 Javascript 只是我自己无法正确编写它 我有很多视频 都是 mp4 大小相同 都在服务器上的同一个
  • 我应该如何使用区域获取 aws 区域名称

    您好 我想使用区域手段获取亚马逊网络服务 aws 区域名称 region is us east 1 region name is US East N Virginia region is us west 2 region name is U
  • Spring-Data-Elasticsearch 在底层使用什么 Elasticsearch 客户端?

    我想在我的项目中使用 Spring Data Elasticsearch 我看到了这个 The well known TransportClient is deprecated as of Elasticsearch 7 0 0 and i
  • 新 Ember 路由器的访问实例

    如何访问新 Ember 路由器的实例 API 文档似乎是指旧路由器或不正确 http emberjs com api classes Ember Router html RouterV2 不容易通过全局常量访问 这使得以 错误 方式做事变得
  • 使用 Base64UrlEncode 语句[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我正在尝试通过代码发送电子邮件 但遇到了障碍 我当时正在工作this当 Base64UrlEncode 显示为红色时 我的代码中有相同的 using 语句 using Sys
  • 电话号码国家代码列表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 On this 维基百科条目我发现国际
  • 回形针附件文件大小

    如何获取回形针附件每种样式的文件大小 user attachment file size似乎不起作用 user attachment style size 给出与实际文件大小无关的数字 我没有找到如何获取文件大小对于给定的风格 除了原来的
  • 在boost中定义斐波那契堆的比较函数

    我需要在我的项目中使用斐波那契堆 并且我正在尝试从 boost 库使用它 但我无法弄清楚如何为任意数据类型设置用户定义的比较函数 我需要为结构节点构造一个最小堆 定义如下 struct node int id int weight stru