pair类型vector排序中myCompare函数的工作原理及参数解析
自定义比较函数myCompare的工作原理与执行细节
一、参数p1和p2的含义
myCompare的两个参数p1和p2是排序过程中被取出的两个待比较的pair<int, int>类型元素,函数通过判断这两个元素的关系,告诉sort函数它们的相对顺序应该是什么样的。
二、myCompare的核心工作逻辑
函数的返回值是一个布尔值:
- 当返回
true时,sort会认为p1应该排在p2的前面; - 当返回
false时,sort会认为p1应该排在p2的后面(或者两者顺序不需要调整)。
在你的代码里,myCompare的逻辑是return p1.first < p2.first;,也就是按照pair的第一个元素(first成员)进行升序排序——只要p1的第一个元素比p2的小,p1就放在p2前面。
三、调试视角下的执行过程(结合示例代码)
先看示例中vector的初始状态:
排序前,vector里的元素是:(10,0), (16,1), (7,2), (14,3), (5,4), (3,5), (12,6), (9,7)
sort函数底层会基于高效排序算法(通常是快速排序的变体)的逻辑,反复调用myCompare来判断元素顺序,以下是几个关键比较场景:
- 比较
(16,1)和(7,2):p1是(16,1),p2是(7,2)- 执行
p1.first < p2.first→16 < 7→ 返回false sort因此知道(16,1)应该排在(7,2)后面,会触发两者的位置交换。
- 比较
(10,0)和(3,5):p1是(10,0),p2是(3,5)- 执行
10 < 3→ 返回false sort会把(3,5)调整到(10,0)前面。
- 比较
(3,5)和(5,4):p1是(3,5),p2是(5,4)- 执行
3 <5→ 返回true sort确认(3,5)应该在(5,4)前面,无需交换。
经过多次这样的比较和位置调整,最终vector会按照first成员升序排列,输出结果为:3 5 5 4 7 2 9 7 10 0 12 6 14 3 16 1
内容的提问来源于stack exchange,提问作者Purushottam Nawale
相关产品推荐
相关产品推荐

