当前位置:主页 > c/c++教程 > C++ Boost Heap

C++ Boost Heap使用实例详解

发布:2023-03-09 09:00:01 59


本站精选了一篇相关的编程文章,网友暴高芬根据主题投稿了本篇教程内容,涉及到C++、Boost、Heap、C++、Boost、Heap库函数、C++ Boost Heap相关内容,已被681网友关注,内容中涉及的知识点可以在下方直接下载获取。

C++ Boost Heap

一、说明Boost.Heap

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

二、功能示例

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

#include 
#include 
using namespace boost::heap;
int main()
{
  priority_queue pq;
  pq.push(2);
  pq.push(3);
  pq.push(1);
  for (int i : pq)
    std::cout << i << '\n';
  priority_queue 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 
#include 
using namespace boost::heap;
int main()
{
  binomial_heap bh;
  bh.push(2);
  bh.push(3);
  bh.push(1);
  binomial_heap 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 
#include 
using namespace boost::heap;
int main()
{
  binomial_heap 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内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • 深度剖析C语言结构体

    发布:2022-07-25

    给大家整理一篇关于C语言的教程,今天小编就为大家分享一篇关于深度剖析C语言结构体,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


  • 提高C++程序运行效率的10个简单方法

    发布:2023-01-03

    为网友们分享了关于C++的教程,这篇文章主要介绍了提高C++程序运行效率的10个简单方法,包括了循环、变量、继承等等应用的技巧,非常具有实用价值,需要的朋友可以参考下


  • C++替换栈中和.data中的cookie实现步骤详解

    发布:2023-03-04

    这篇文章主要介绍了C++替换栈中和.data中的cookie实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧


  • 浅谈C++的几种从键盘输入方式

    发布:2023-01-11

    给网友朋友们带来一篇关于C++的教程,今天小编就为大家分享一篇浅谈C++的几种从键盘输入方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • C++11正则表达式详解(regex_match、regex_search和regex_replace)

    发布:2023-03-02

    正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,下面这篇文章主要介绍了C++11正则表达式(regex_match、regex_search和regex_replace)的相关资料,需要的朋友可以参考下


  • 用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)

    发布:2022-04-21

    今天小编就为大家分享一篇关于用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


  • 详解C++中的左值,纯右值和将亡值

    发布:2023-03-01

    C++中本身是存在左值,右值的概念,但是在C11中又出现了左值,纯右值,将亡值得概念;这里我们主要介绍这些值的概念,感兴趣的可以了解一下


  • C++ Boost CircularBuffer算法超详细精讲

    发布:2023-03-08

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


网友讨论