我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++BoostHeap使用实例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++BoostHeap使用实例详解

一、说明Boost.Heap

Boost.Heap 也可以称为 Boost.PriorityQueue,因为该库提供了几个优先级队列。但是,Boost.Heap 中的优先级队列与 std::priority_queue 不同,它支持更多功能。

二、功能示例

示例 17.1。使用 boost::heap::priority_queue

#include <boost/heap/priority_queue.hpp>
#include <iostream>
using namespace boost::heap;
int main()
{
  priority_queue<int> pq;
  pq.push(2);
  pq.push(3);
  pq.push(1);
  for (int i : pq)
    std::cout << i << '\n';
  priority_queue<int> pq2;
  pq2.push(4);
  std::cout << std::boolalpha << (pq > pq2) << '\n';
}

Example17.1

示例 17.1 使用了 boost::heap::priority_queue 类,该类在 boost/heap/priority_queue.hpp 中定义。一般来说,这个类的行为类似于 std::priority_queue,除了它允许你迭代元素。迭代中返回的元素顺序是随机的。

boost::heap::priority_queue 类型的对象可以相互比较。示例 17.1 中的比较返回 true,因为 pq 的元素比 pq2 多。如果两个队列具有相同数量的元素,则将成对比较元素。

示例 17.2。使用 boost::heap::binomial_heap

#include <boost/heap/binomial_heap.hpp>
#include <iostream>
using namespace boost::heap;
int main()
{
  binomial_heap<int> bh;
  bh.push(2);
  bh.push(3);
  bh.push(1);
  binomial_heap<int> bh2;
  bh2.push(4);
  bh.merge(bh2);
  for (auto it = bh.ordered_begin(); it != bh.ordered_end(); ++it)
    std::cout << *it << '\n';
  std::cout << std::boolalpha << bh2.empty() << '\n';
}

Example17.2

示例 17.1 使用了 boost::heap::priority_queue 类,该类在 boost/heap/priority_queue.hpp 中定义。一般来说,这个类的行为类似于 std::priority_queue,除了它允许你迭代元素。迭代中返回的元素顺序是随机的。

boost::heap::priority_queue 类型的对象可以相互比较。示例 17.1 中的比较返回 true,因为 pq 的元素比 pq2 多。如果两个队列具有相同数量的元素,则将成对比较元素。

示例 17.2。使用 boost::heap::binomial_heap

示例 17.2 引入了类 boost::heap::binomial_heap。除了允许您按优先级顺序迭代元素之外,它还允许您合并优先级队列。一个队列中的元素可以添加到另一个队列。

示例在队列 bh 上调用 merge()。队列 bh2 作为参数传递。对 merge() 的调用将数字 4 从 bh2 移动到 bh。调用后,bh 包含四个数字,bh2 为空。

for 循环在 bh 上调用 ordered_begin() 和 ordered_end()。 ordered_begin() 返回一个从高优先级元素迭代到低优先级元素的迭代器。因此,示例 17.2 将数字 4、3、2 和 1 写入标准输出。

示例 17.3。更改 boost::heap::binomial_heap 中的元素

#include <boost/heap/binomial_heap.hpp>
#include <iostream>
using namespace boost::heap;
int main()
{
  binomial_heap<int> bh;
  auto handle = bh.push(2);
  bh.push(3);
  bh.push(1);
  bh.update(handle, 4);
  std::cout << bh.top() << '\n';
}

boost::heap::binomial_heap 允许您在元素添加到队列后更改它们。示例 17.3 保存了 push() 返回的句柄,从而可以访问存储在 bh 中的数字 2。

update() 是 boost::heap::binomial_heap 的成员函数,可以调用它来更改元素。示例 17.3 调用成员函数将 2 替换为 4。然后,使用 top() 获取具有最高优先级的元素,现在为 4。

除了 update() 之外,boost::heap::binomial_heap 还提供了其他成员函数来更改元素。如果您事先知道更改是否会导致更高或更低的优先级,则可以调用成员函数 increase() 或 decrease()。在示例 17.3 中,对 update() 的调用可以替换为对 increase() 的调用,因为该数字从 2 增加到 4。

Boost.Heap 提供了额外的优先级队列,其成员函数的主要区别在于它们的运行时复杂度。例如,如果您希望成员函数 push() 具有恒定的运行时复杂度,则可以使用类 boost::heap::fibonacci_heap。 Boost.Heap 上的文档提供了一个表格,其中概述了各种类和函数的运行时复杂性。

到此这篇关于C++ Boost Heap使用实例详解的文章就介绍到这了,更多相关C++ Boost Heap内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++BoostHeap使用实例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++BoostHeap使用实例详解

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
2022-11-13

C++的optional用法实例详解

optional是C++标准库中的模板类,表示值存在或不存在。它用于处理可能为null或未初始化的指针和引用,通过has_value()判断值是否存在,使用value()获取值(如果存在)。optional用法实例包括处理可能为null的指针、缺少的参数、为零的值和嵌套optional。其好处在于明确null值处理、提高可读性、增强安全性和可扩展性。
C++的optional用法实例详解
2024-04-02

C语言中static的使用方法实例详解

static一般用于修饰局部变量,全局变量,函数,下面这篇文章主要给大家介绍了关于C语言中static用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

C++使用宏函数实现单例模板详解

在我们日常开发中,无可避免需要使用单例模式进行设计类对象。这篇文章主要介绍了如何使用宏函数实现单例模板,感兴趣的小伙伴可以了解一下
2023-02-10

C++模板index_sequence使用示例详解

这篇文章主要为大家介绍了C++模板index_sequence使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

KotlinViewModelProvider.Factory的使用实例详解

这篇文章主要介绍了KotlinViewModelProvider.Factory的使用,在我们使用ViewModel的时候,我们会发现,有的时候我们需要用到ViewModelFactory,有的时候不需要
2023-02-17

C++的new和delete使用示例详解

这篇文章主要为大家介绍了C++的new和delete使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

Golang中Append()使用实例详解

今天在刷leetcode的时候,第113题让我遇到了一个Go语言中append函数的一个坑,所以复习下,这篇文章主要给大家介绍了关于Golang中Append()使用的相关资料,需要的朋友可以参考下
2023-01-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录