在一个std::双和一个类的std::对上的std::greater。

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

是否 std::greater 当你有 std::pairint 和一个类?

我试图创建一个优先级队列,按第一个元素排序。

std::priority_queue<std::pair<double, classA>, std::vector<std::pair<double, classA>>, std::greater<std::pair<double, classA>>> priorityQueue

但我得到一个错误信息说

不符合'operator<'`。

而且它暗示了第二个元素的 std::pair,它是类型的。

std::greater 的第一和第二元素。std::pair?

c++ std priority-queue std-pair min-heap
1个回答
3
投票

std::greater 只是一个包装器,用于调用 operator < 的模板类型。 对于 std::pair 我们可以查看参考网站 此处 我们看到它说

比较lhs和rhs在词法上的不同。operator<即对第一个元素进行比较,只有当它们相等时,才对第二个元素进行比较。

所以,它使用的是 operator < 的两个类型,这意味着你的类类型需要提供它。 因为它没有提供,所以你会得到编译器错误。


0
投票

你的 classA 类型需要定义一个 operator<.注意 std::pair 从词法上比较。

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