理解对向量的排序(int 和指向对象的指针)

Understand the sorting of a vector of pair (int and pointer to object)

我有一个向量对定义如下:

vector<pair<int, myClass *>> myVector;

矢量使用以下方式排序:

sort(myVector.begin(), myVector.end());

这段代码不是我的,一切正常。

我唯一不明白的是:

当我的向量中有两个元素与第一个元素具有相同的 int 值时,如何进行排序?根据什么标准?

我首先想到的是,它基于对中指向我的对象的指针的值。但是我看不到。

我想了解它,因为我需要在 Matlab 的演示器上重现这种行为(排序)。

std::sort 使用 std::less 作为默认比较器。对于仅调用元素 operator< 并根据 first 排序的 std::pair,则 second。有关详细信息,请参见此处:https://en.cppreference.com/w/cpp/utility/pair/operator_cmp.

但是,通过 < 比较不指向同一数组元素的指针是实现定义的。一般来说,您需要使用 std::less 来正确比较指针。

因此,具有相同 first 的元素的顺序是实现定义的,很难准确复制。

sort(A.begin(), A.end(), 
[]( pair<int, myClass *> p1, pair<int, myClass *>p2 )  
{ return p1.first < p2.first; });

根据您的意愿或您希望排序发生的方式修改 lambda。

正如我在对我的问题的评论中所说,tt 确实是用作第二个排序参数的指针的数值。这种行为在程序本身(再一次,不是我的程序)中没有任何意义,而且在 Matlab 中也不会重现。无论如何,谢谢大家的帮助。