std::greater 在 std::pair 的双精度和 class

std::greater on a an std::pair of a double and a class

当您有一个 intstd::pair 和一个 class 时,std::greater 是否有效?

我正在尝试创建一个优先级队列,按第一个元素排序:

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

但我收到一条错误消息

no match for 'operator<'`

暗指std::pair的第二个元素,是class类型。

std::greater是否应用于std::pair的第一个和第二个元素?

您的 classA 类型需要定义一个 operator<。 请注意 std::pair 按字典顺序进行比较。

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

Compares lhs and rhs lexicographically by operator<, that is, compares the first elements and only if they are equivalent, compares the second elements.

因此,它使用了两种类型的 operator <,这意味着您的 class 类型需要提供它。因为它不会出现编译器错误。