不含运算符的多重比较器< (C++)

问题描述 投票:0回答:1

我有一个班 bit 我想对不同的优先级队列按照不同的标准进行排序。

在这里,我想用不同的标准对不同的优先级队列进行排序。bit.h 我有。

#include<vector>
#include<queue>

class bit {
  static std::priority_queue<bit, std::deque<bit>> bigBitVector;
  mutable long long startTime;
  mutable long long endTime;
  // other methods, constructor, etc.
  static bool startTimeComp(const bit &a, const bit &c) {
    return a.startTime > c.startTime;
  }
  static bool endTimeComp(const bit &a, const bit &c) {
    return a.endTime > c.endTime;
  }
}

在另一个文件中,我试图初始化一个优先队列,即 bit 对象为。

std::priority_queue<bit, std::deque<bit>, decltype(&bit::startTimeComp)> bigBitVector(bit::startTimeComp);

和另一个作为

std::priority_queue<bit, std::deque<bit>, decltype(&bit::endTimeComp)> bitQueue(bit::endTimeComp);

但我得到一个错误。

usrincludec++7bitsstl_function.h:386:20: error: no match for 'operator<' (操作数类型是'const bit'和'const bit')

我检查了这个错误,我发现其他一些人也有这个问题,他们想定义一些类似于

bool operator<(const bit &a) const {...}

而发生错误的原因是 const 丢失了。但如果我加上 const 对我的比较器来说,编译器会抱怨,因为一个函数不可能既是 staticconst; 如果我删除 static它抱怨是因为没有特定的对象就无法访问它。

似乎问题在于优先级队列正在寻找一个特定的 < 操作符,而不是采用我提供的比较器。我不想提供一个 < 操作符,因为这样我就不能让两个不同的优先级队列以两种不同的方式对同一数据进行排序。

有什么办法可以让我定义多个比较器,避免这个错误吗?

c++ comparator priority-queue
1个回答
0
投票

你忘了静态成员的比较器

static std::priority_queue<bit, std::deque<bit>> bigBitVector;

默认情况下,它将使用 std::less 作为比较器,它又将元素与 operator< 其中 bit 不超载。要么过载 operator< 对于 bit 或指定另一个比较器用于 bigBitVector 应该可以解决你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.