You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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来判断元素顺序,以下是几个关键比较场景:

  1. 比较(16,1)和(7,2):
    • p1是(16,1),p2是(7,2)
    • 执行p1.first < p2.first → 16 < 7 → 返回false
    • sort因此知道(16,1)应该排在(7,2)后面,会触发两者的位置交换。
  2. 比较(10,0)和(3,5):
    • p1是(10,0),p2是(3,5)
    • 执行10 < 3 → 返回false
    • sort会把(3,5)调整到(10,0)前面。
  3. 比较(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:45:50