[stable_sort在成对的向量上,由成对的第一个元素按升序排列,而在C ++中没有比较器功能

问题描述 投票:0回答:1
#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 

    vector<pair<int,int>>v;
    v.push_back(make_pair(1,3));
    v.push_back(make_pair(1,1));
    v.push_back(make_pair(2,19));
    v.push_back(make_pair(2,4));

    int n = 4; 

    stable_sort(v.begin(),v.end()); 

    for (int i = 0; i < n; i++) 
        cout << "[" << v[i].first << ", " << v[i].second 
             << "] "; 

    return 0; 
} 

输出:[1, 1] [1, 3] [2, 4] [2, 19]预期输出:[1, 3] [1, 1] [2, 19] [2, 4]

为什么对对向量即使应用了稳定的排序也不会保持相对顺序,当我们知道默认情况下对对向量是根据向量的第一个元素进行排序时?如果我编写比较器功能,则它可以正常工作,但是当我未定义任何比较器功能时,它就无法正常工作。为什么会这样呢?

c++ vector comparator std-pair stable-sort
1个回答
0
投票

使用的比较器在进行比较时会使用成对的两个值。

[在字典上通过operator<比较lhs和rhs(从C ++ 20开始为operator<=>,即比较第一个元素,并且只有在它们相等时才比较第二个元素。

© www.soinside.com 2019 - 2024. All rights reserved.