理解对向量的排序(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 中也不会重现。无论如何,谢谢大家的帮助。
我有一个向量对定义如下:
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 中也不会重现。无论如何,谢谢大家的帮助。