gpt4 book ai didi

c++ - 优先队列 : Using an object to compare instead of a class

转载 作者:太空狗 更新时间:2023-10-29 19:39:43 24 4
gpt4 key购买 nike

priority_queue 开始,我遇到了这样的问题:我需要将元素存储在队列中,但是它们的排序标准不包含在元素本身中,而是包含在不同的地方,就像在 map 中一样:

std::map<element, value> element_values;
std::priority_queue<element> queue;

我现在需要的是这样的东西:

struct Comp
{
std::map<...>& the_map;
Cpmp(std::map<...> _map) : the_map(_map) {}

bool operator() (element a, element b)
{
return the_map[a] < the_map[b];
}
}

Comp comp(element_values);
std::priority_queue<element, std::vector<element>, comp> queue; // does not work
std::priority_queue<element, std::vector<element>, Comp> queue; // does work but I'd not be able to pass values to the constructor

元素本身没有内在顺序。一种解决方法是定义一个结构来包装这些东西,但也许有人知道更聪明的方法。我还考虑过提供一个只在我当前范围内有效的比较函数(它本身就是一个函数),但据我所知,C++ 不支持它,至少不支持像我需要的那样捕获局部变量。

最佳答案

std::priority_queue<T, Cont, Comp>将比较对象类型作为模板参数。要传递引用某物的对象,您需要将其作为构造函数参数传递:

std::priority_queue<element, std::vector<element>, Comp> queue(comp);

关于c++ - 优先队列 : Using an object to compare instead of a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com