Функция сравнения для очереди приоритета объекта C

#c #object #compare #priority-queue

#c #объект #Сравнить #приоритет-очередь

Вопрос:

Мне нужна функция сравнения для использования в моей очереди приоритетов для сравнения объектов. Объекты должны быть отсортированы по соотношению объектов. По какой-то причине функция RatioCompare не будет работать / компилироваться.

Компилятор выдает следующую ошибку:

В функции-члене bool RatioCompare::operator()(const Itemamp;, const Itemamp;) const : joulethief.cpp:58 : ошибка: передача ‘const Item’ в качестве ‘этого’ аргумента double Item::getRatio() отбрасываемых квалификаторов joulethief.cpp:59: ошибка: передача ‘const Item’ в качестве this аргумента double Item::getRatio() отбрасываемых квалификаторов

Можете ли вы, ребята, взглянуть?

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

Вот код, в котором я объявляю его, а затем проверяю, работает ли он в main…

 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();
}
  

У меня также есть как очередь, так и векторная библиотека, включенные в программу.

Комментарии:

1. Какую ошибку вы видите?

2. В функции-члене ‘bool RatioCompare::operator()(const Itemamp;, const Itemamp;) const’: joulethief.cpp:58: ошибка: передача ‘const Item’ в качестве ‘этого’ аргумента ‘double Item::getRatio()’ отбрасывает квалификаторы joulethief.cpp:59: ошибка: передача ‘const Item’ в качестве ‘этого’ аргумента ‘double Item::getRatio()’ отбрасывает квалификаторы

3. Вам нужно пометить Item::getRatio() как const квалифицированный.

4. Took-Look! : С…

5. Могу ли я сделать это, поместив const после двойного getRatio() в моем конструкторе для объекта?

Ответ №1:

Функция-член Item::getRatio() должна быть помечена как const , иначе компилятор считает, что этот метод может изменять Item экземпляр, что не позволяет вам использовать его, когда вы передаете указанный Item экземпляр как a const_reference (как вы сделали в operator() of RatioCompare ).

Итак, просто измените определение Item::getRatio на:

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