Декларация очереди приоритетов C ++ - PullRequest
0 голосов
/ 18 сентября 2018

Некоторое время я был довольно разочарован этим, и я просто не могу найти, где находится ошибка (заметьте, мой компилятор не поддерживает c ++ 11)

В основном я пытаюсь построить приоритетную очередь, где каждый элемент содержит два дополнительных элемента. Первый элемент представляет собой очередь векторов символов, а второй - эвристику для оценки этой очереди.

Содержимое очереди символьных векторов не важно, просто оценка эвристики (больше) следующим образом

struct pathP
{
public:
    queue<vector<char>> que;
    int hue;
};

struct pathComp
{
    bool comp(const pathP &s1, const pathP &s2) const
    {
        return s1.hue < s2.hue;
    }
};

----------------------- (в другом месте в моем коде)

priority_queue<pathP, vector<pathP>, pathComp> endV;
queue<vector<char>> saveQ;
pathP pathStore;
int h1, heur;

----------------------- (далее по функции)

pathStore.que = saveQ;
heur = h1;
pathStore.hue = heur;
endV.push(pathStore); //error C2064

ошибка c2064 гласит: «Термин не оценивает функцию, принимающую 2 аргумента» и я не уверен, как это исправить

1 Ответ

0 голосов
/ 18 сентября 2018
struct pathComp
{
    bool operator()(const pathP &s1, const pathP &s2) const
    {
        return s1.hue < s2.hue;
    }
};

priority_queue не использует метод с именем comp.Вместо этого вы должны определить функтор , который является классом, который переопределяет operator(), как указано выше.

...