优先级队列的自定义比较器,无需定义嵌套类

时间:2018-10-17 18:18:22

标签: c++11 comparator priority-queue custom-compare

我有一个叫做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()。我不想通过使它们成为我的tile结构的成员变量来解决此问题。

如何定义优先级队列的比较器(布尔函数形式)?

一切都在我的课堂聚会中。

我尝试过:

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

但是我收到错误消息“未知类型名称less_than”。我可以正确实现上述代码吗?还有其他方法可以做到吗?

(包括所有必需的库)

谢谢!

0 个答案:

没有答案