gpt4 book ai didi

c++ - 对象优先级队列 C++ 的比较函数

转载 作者:行者123 更新时间:2023-11-28 05:29:42 25 4
gpt4 key购买 nike

我需要一个比较函数来在我的优先级队列中使用来比较对象。对象需要按对象的比例排序。由于某种原因,RatioCompare 函数将无法工作/编译。

编译器报如下错误:

In member function bool RatioCompare::operator()(const Item&, const Item&) const: joulethief.cpp:58: error: passing ‘const Item’ as ‘this’ argument of double Item::getRatio() discards qualifiers joulethief.cpp:59: error: passing ‘const Item’ as this argument of double Item::getRatio() discards qualifiers

你们能看看吗?

struct RatioCompare
{
bool operator()(const Item &i1, const Item &i2) const
{
double i1value= i1.getRatio();
double i2value= i2.getRatio();
return i1value < i2value;
}
};

这是我声明它然后测试它是否在主程序中工作的代码...

priority_queue<Item, vector<Item>, RatioCompare > pq;

for(int i=0; i<n; i++)
{
pq.push(tosteal[i]);
}

while(!pq.empty())
{
Item consider= pq.top();
cout<< "Name: "<< consider.getName()<< "Ratio "<< consider.getRatio()<<endl;
pq.pop();
}

我的程序中也包含了队列和 vector 库。

最佳答案

成员函数Item::getRatio()需要被标记为const否则编译器会认为这个方法可以改变一个Item实例,从而防止您在将所述 Item 实例作为 const_reference 传递时使用它(就像您在 operator() 中所做的那样)比率比较).

因此,只需将 Item::getRatio 的定义更改为:

class Item {
public:
// ...
double getRatio() const; // marked as const, does not alter Item instances
};

关于c++ - 对象优先级队列 C++ 的比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811999/

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