gpt4 book ai didi

c++ - 在 C++ 中是否有任何统一的方法来创建自定义比较器?

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:21 24 4
gpt4 key购买 nike

基本上我需要一种方法来以统一的方式创建比较器,以便在 sort() 函数和优先级队列中进行比较。这样也更容易记住。

我的疑问是为什么优先级队列使用“Comp”而排序使用“Comp()”。有没有其他方法可以让两者使用相同的格式?请告诉一些标准的方式。谢谢。

我正在尝试比较这个问题中的类: https://practice.geeksforgeeks.org/problems/minimum-platforms/0 .

代码:https://ide.geeksforgeeks.org/R8snxdJl1B .

Link for below code .

// 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com