Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 第二个元素没有比较器的对排序_C++ - Fatal编程技术网

C++ 第二个元素没有比较器的对排序

C++ 第二个元素没有比较器的对排序,c++,C++,我正在试图弄清楚,下面的代码是如何在没有警告/错误的情况下编译的 这是我在办公室工作的项目中看到的一段代码。(变量/类名已更改) vector-vec=getVecFromSomewhere(); 排序(vec.begin(),vec.end()); 我已经检查了ClassA的源代码,我没有看到任何比较器被实现。那么,只有一对中的第一个元素需要比较器,这是真的吗 编辑:ClassA的所有实例都来自同一个向量。ClassA可能没有运算符您的理解不正确。定义运算符这是ClassA*不是ClassA

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

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

vector-vec=getVecFromSomewhere();
排序(vec.begin(),vec.end());
我已经检查了ClassA的源代码,我没有看到任何比较器被实现。那么,只有一对中的第一个元素需要比较器,这是真的吗


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

ClassA
可能没有
运算符您的理解不正确。定义
运算符这是
ClassA*
不是
ClassA
,您是在排序指针而不是值。可能会有帮助。你是说这里的行为没有定义?@Mox不能说。所有
ClassA*
指针都指向同一个数组吗?@Mox:这种行为几乎肯定是无意的,即使它是正式定义的。这意味着,如果这些元素不是来自同一个数组,那么这种行为将是错误的undefined@Mox据我所知,是的
pair
的运算符
可能需要稍加补充:只能对相关指针使用相对比较(小于、大于)(如数组示例)。否则只定义相等/不相等。@JoachimPileborg:但您可以在不相关的指针上使用
std::less(ptr1,ptr2)
-OP可能希望编写一个比较函数来实现这一点。
vector<pair<time_t, ClassA *> > vec = getVecFromSomewhere();
std::sort(vec.begin(), vec.end());    
ClassA as [10];
as[0] < as[1]; //invalid, compares ClassAs
as < as+1; //valid, compares ClassA*s