std::greater 在 std::pair 的双精度和 class
std::greater on a an std::pair of a double and a class
当您有一个 int
的 std::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 类型需要提供它。因为它不会出现编译器错误。
当您有一个 int
的 std::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 类型需要提供它。因为它不会出现编译器错误。