c++sort函数对于pair嵌套形成三元组关键字排序出现错误

#include
#include
#include
#include
using namespace std;
pair<int, pair<int, int>> t_d[100];
int t[100],d[100];
bool cmp(pair<int, pair<int, int>>a, pair<int, pair<int, int>>b)
{
return a.second.second < b.second.second;//根据第二个pair的second的值升序排序
}
int main() {
int n;
cin >> n;
for (int i = 1;i <= n;i++)
cin >> t[i];
for (int i = 1;i <= n;i++)
cin >> d[i];
for (int i = 1;i <= n;i++)
t_d[i] = make_pair(i, make_pair(t[i], d[i]));
sort(t_d, t_d + n, cmp);
for (int i = 1;i <= n;i++) {
cout << t_d[i].second.second<< " ";
}
}
对于两组测试样例,只有一组n等于5时排序成功输出上升序列,另一组对于依照关键字排序前后关键字顺序没有变化且不是正确顺序

img

img

img


这里的参数最好加引用,
bool cmp(pair<int, pair<int, int>>&a, pair<int, pair<int, int>>&b)
我运行了下你的代码,你的问题在于数组下标从0开始,而不是从1开始,这样你的t_d,t_d+d 是从0开始排序的,t+3也就是0,1,2这三个在排序,但是你的2,8,6
下标分别为1,2,3,也就是6并没有参与排序,所以0,2,8,6是正确的顺序