boost heap

Posted sssblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了boost heap相关的知识,希望对你有一定的参考价值。

1. using 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 << std::endl;
  

  priority_queue<int> pq2;
  pq2.push(3);
  std::cout << std::boolalpha << (pq > pq2) << std::endl;
  return 0;

In general this class behaves like std::priority_queue, except it allows you to iterate over elements. The order of elements returned in the iteration is random.

Objects of type boost::heap::priority_queue can be compared with each other. The comparison above returns true because pq has more elements than pq2. If both queues had the same number of elements, the elements would be compared in pairs.

2. using 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() << std::endl;
  return 0;

输出为:

4

3

2

1

true

boost::heap::binomial_heap in addition to allowing you to iterate over elements in priority order, it also lets you merge priority queues. Elements from one queue can be added to another queue. As above, calls merge() on the queue bh. The queue bh2 is passed as a parameter. The call to merge() moves the number 4 from bh2 to bh. After the call, bh contains four numbers, and bh2 is empty. The for loop calls ordered_begin() and ordered_end() on bh. ordered_begin() returns an iterator that iterates from high priority elements to low priority elements.

4. update

#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() << std::endl;
  return 0;

As above saves a handle returned by push(), making it possible to access the number 2 stored in bh.

update() is a member function of boost::heap::binomial_heap that can be called to change an element. Afterwards, the element with the highest priority, now 4, is fetched with top().

以上是关于boost heap的主要内容,如果未能解决你的问题,请参考以下文章

boost::priority_queue 未编译

使用 std::vector 时的简单 Boost UDP 接收器 gest heap-use-after-free

在C ++ Builder中编译Boost库时的警告

PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段

GraphQL 片段的片段

在堆数据结构中环绕问题