std :: sort on第二个元素没有比较器

时间:2016-10-19 09:44:00

标签: c++

我试图弄清楚如何在没有警告/错误的情况下编译以下代码。

这是我在项目中看到的一段代码,我正在办公室工作。 (变量/类名已更改)

ArrayList

我检查了ClassA的源代码,我没有看到任何比较器正在实现。那么只有一对中的第一个元素需要比较器吗?

编辑:ClassA的所有实例都来自同一个向量。

2 个答案:

答案 0 :(得分:5)

ClassA可能没有operator<,但这并不重要,因为您在ClassA*中存储了ClassA,而不是ClassA as [10]; as[0] < as[1]; //invalid, compares ClassAs as < as+1; //valid, compares ClassA*s 。您可以比较指针,因此您的代码可以正常工作。

createsale.php

请注意,您需要非常小心比较的语义。你真的想要比较那些指针吗?他们指向同一个数组对象吗?如果没有,一旦你比较它们,你就会进入一个充满乐趣的未定义行为的乐趣之地。如果是这样,那个顺序可能仍然不是你想要的那个。

答案 1 :(得分:3)

您的理解不正确。 std::pair定义operator<。它按字典顺序进行比较,即仅在第一个元素相等时才比较第二个元素。

确切的标准(n4606):

  

template <class T1, class T2>

     

constexpr bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y)

     

返回:x.first < y.first || (!(y.first < x.first) && x.second < y.second)

这种情况有点特殊,因为将指针与不属于同一对象/数组的对象进行比较是未定义的。