我已经定义了这样一个C++优先级队列:
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(&mygreater)> frontier(&mygreater);
使用这样的自定义myGreger函数:
bool mygreater(pair<int,int> v1, pair<int,int> v2) {
return v1.first > v2.first;
}
但是,当我尝试将一对整数向量推送到优先级队列时,我会得到大量错误,包括:
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);
是否有人知道是什么导致了我尝试推送到优先级队列时的错误任何帮助都非常感谢。
最佳答案
此错误与自定义比较无关如果执行此操作,则会出现相同的错误:
std::priority_queue<int> q;
std::vector<int> v;
q.push(v);
std::priority_queue::push
接受一个对象,不管您存储的是什么类型的对象,而不是它们的整个向量您存储的类型是pair<int,int>
,但您正在尝试按vector<pair<int,int>>
。关于c++ - 具有自定义比较功能的C++优先级队列在Push()上的行为不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47067039/