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