c++ - 构造后切换 std::priority_queue 比较器
问题描述
我正在实现一个中值切割算法,它使用优先级队列来跟踪接下来要拆分的框:
- 前 50% 的削减将基于
population
- 剩余的 50% 削减将根据
population * volume
.
我正在使用 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
从更改compareVBoxPopulation
为compareVBoxPopulationAndVolume
。我可以创建另一个std::priority_queue
,但我想重用底层的内容vector<VBox>
。
有一堆构造函数需要一个容器,但我无法访问vector
my的std::priority_queue
,因为它是受保护的。理想情况下,我需要类似的东西
priority_queue(const Compare& compare, priority_queue&& other);
这里两个比较器具有相同的类型,因此它在技术上可以工作。有没有办法获得这种行为?
解决方案
推荐阅读
- angular - Angular docker 无法访问后端服务容器
- linux - 如何在linux中使用shell脚本读取文件并替换另一个文件中的字符串?
- sql - 如何从 SQL 中的两个步骤中迈出一步 - 用户同时工作
- python-3.x - AttributeError:类型对象'FooEnv'没有属性'reset'
- javascript - JavaScript 中的 Window.matchMedia 不起作用
- heroku - 当多个可用时如何确定使用哪个heroku buildpack?
- python - 转换一个刚性变换,使旋转中心不是原点
- websocket - 如何使用 Jupyter 笔记本连接多个 websocket
- multithreading - 达到超时时终止进程并在 Rust 中处理输出
- angular - Angular中的for-of循环