首页 > 解决方案 > 构造后切换 std::priority_queue 比较器

问题描述

我正在实现一个中值切割算法,它使用优先级队列来跟踪接下来要拆分的框:

我正在使用 a std::priority_queue,它看起来类似于第 1 步:

auto compareVBoxPopulation = [](const VBox &a, const VBox &b) {
  return a.population < b.population;
};

auto compareVBoxPopulationAndVolume = [](const VBox &a, const VBox &b) {
  return (a.population * a.volume) < (b.population * b.volume);
};

std::priority_queue<VBox, std::vector<VBox>, decltype(compareVBoxPopulation)>
      queue(compareVBoxPopulation);

// do some cuts
// change comparator to compareVBoxPopulationAndVolume
// do some more cuts

我想将我的比较器std::priority_queue从更改compareVBoxPopulationcompareVBoxPopulationAndVolume。我可以创建另一个std::priority_queue,但我想重用底层的内容vector<VBox>

一堆构造函数需要一个容器,但我无法访问vectormy的std::priority_queue,因为它是受保护的。理想情况下,我需要类似的东西

priority_queue(const Compare& compare, priority_queue&& other);

这里两个比较器具有相同的类型,因此它在技术上可以工作。有没有办法获得这种行为?

标签: c++priority-queue

解决方案


推荐阅读