具有自定义比较功能的C ++优先级队列在Push()上无法正常运行

时间:2017-11-02 03:19:08

标签: c++ algorithm c++11 vector priority-queue

我已经定义了一个像这样的C ++优先级队列:

priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(&mygreater)> frontier(&mygreater);

使用自定义mygreater函数():

bool mygreater(pair<int,int> v1, pair<int,int> v2) {
        return v1.first > v2.first;
}

然而,当我尝试将一对int的向量推送到优先级队列时,我不断收到大量错误,包括:

error: no matching function for call to ‘std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int> >, bool (*)(std::pair<int, int>, std::pair<int, int>)>::push(std::vector<std::pair<int, int> >&)’ frontier.push(temp);

可能有人知道在我尝试推送到优先级队列时导致错误的原因是什么?任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:1)

此错误与您的自定义比较无关。如果你这样做,你会得到同样的错误:

std::priority_queue<int> q;
std::vector<int> v;
q.push(v);

std::priority_queue::push获取您存储的任何类型的单个对象,而不是它们的整个向量。您要存储的类型为pair<int,int>,但您尝试推送vector<pair<int,int>>