基本上我需要一种方法来以统一的方式创建比较器,以便在 sort()
函数和优先级队列中进行比较。这样也更容易记住。
我的疑问是为什么优先级队列使用“Comp”而排序使用“Comp()”。有没有其他方法可以让两者使用相同的格式? 请告诉一些标准的方式。谢谢。
我正在尝试比较这个问题中的类 : https://practice.geeksforgeeks.org/problems/minimum-platforms/0 .
代码:https://ide.geeksforgeeks.org/R8snxdJl1B .
// constructing priority queues
#include <iostream> // std::cout
#include <queue> // std::priority_queue
#include <vector> // std::vector
#include <functional> // std::greater
#include <algorithm>
using namespace std;
class Comp{
public:
bool operator() (const int& lhs, const int&rhs) const{
return (lhs>rhs);
}
};
int main (){
int myints[]= {10,60,50,20};
// using mycomparison:
priority_queue<int, vector<int>, Comp> pq;
cout << "pq is using mycomparison" << endl;
vector<int> v= {10,60,50,20};
sort(v.begin(), v.end(), Comp());
cout << "sort using mycomparison()" << endl;
return 0;
}
最佳答案
why the priority queue is using "Comp" and sort is using "Comp()"
priority_queue
是一个类型,sort
是一个函数。函数可以推断模板参数,但默认构造的类型没有可从中推断类型的参数。
如果调用构造函数,C++17 的模板推导指南将让您使用 Comp()
形式:
std::priority_queue pq{Comp(), std::vector<int>()};
如果你只有 C++11 或 14,你可以编写一个辅助函数来构建一个带有自定义比较器的函数:
template<typename T, typename Container = std::vector<T>, typename Comp>
std::priority_queue<T, Container, Comp> make_priority_queue(Comp comp) {
return std::priority_queue<T, Container, Comp>{comp};
}
用作
auto pq = make_priority_queue<int>(Comp());
关于c++ - 在 C++ 中是否有任何统一的方法来创建自定义比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58273298/