Пользовательский компаратор для приоритетной очереди без определения вложенного класса - PullRequest
0 голосов
/ 17 октября 2018

У меня есть класс с именем getout (без конструктора).В этом классе у меня есть некоторые частные переменные, которые являются приоритетными очередями.Очереди приоритетов инициализируются пользовательской функцией компаратора, которую я должен создать:

priority_queue<tile, vector<tile>, ****insert comparator here***> primary;

Я понимаю, что пользовательские компараторы могут быть написаны с использованием класса или структуры.Однако я не могу сделать это таким образом (я уверен, что есть способ).Причина в том, что в этом компараторе я использую функции, относящиеся к моему классу.Я решил написать свой компаратор как обычную функцию bool следующим образом:

class escape{

public:
//grabs row of the tile
int get_row(int index){
    return floor(index/size);
}

//grabs column of the tile
int get_col(int index){
    return index - get_row(index)*size;
}

//stores information about each tile of the grid
struct tile{
    int index;
};

//returns the index provided a row and column
int get_index(int row, int col){
    return row*size + col;
}
//comparator less_than
bool less_than(const tile &t1, const tile &t2)
{
    if(t1.rubble_amount == t2.rubble_amount){
        //return object with lower column value
        if(get_col(t1.index) == get_col(t2.index)){
            return get_row(t1.index) > get_row(t2.index);
        }
        //if column values are same, return object with lower row
        else if(get_col(t1.index) > get_col(t2.index)){
            return true;
        }
    }//if
    return t1.rubble_amount > t2.rubble_amount;
}//comparator less_than

};

Функции, относящиеся к моему классу, который я использую: get_row (), get_col ().Я не хочу разрешать это, делая их переменными-членами моих структур плиток.

Как определить компаратор моей очереди приоритетов в форме функции bool?

Все в моем классе.

Я пытался:

priority_queue<tile, vector<tile>, function<bool(tile, tile)>> primary(less_than);

Но я получаю ошибку "Неизвестное имя типа less_than".Правильно ли я реализую приведенный выше код?Есть ли другой способ сделать это?

(все необходимые библиотеки включены)

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...