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

标签 c++

基本上我需要一种方法来以统一的方式创建比较器,以便在 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/

相关文章:

c++ - Eclipse 显示错误,但项目编译并执行

c++ - 为内存和外部依赖管理重新组织 C++ 代码

c++ - 微软对 std::regex 的实现

c++ - hpp 和 cpp 文件添加到库时出现链接器错误

c++ - MISRA C++ 规则 5-0-3 误报警告

c++ - 从 .docx 读取 theme1.xml,没有命名空间的属性

c++ - 带有 VS 2008 的 OpenCV 2.3 - 鼠标事件

c++ - STL 映射的迭代器++ 复杂性

c++ - 概念是 SFINAE 的变体吗

c++ - 处理构造函数时的智能指针