C++ stable_sort not stable?



我正在使用C stable_sort使用比较器函数按上升顺序对我的类对象进行分类,但是排序不稳定。围绕该工作的工作是逆转迭代并逆转比较器中的逻辑。但不能理解为什么它不应该正常工作。代码:

using namespace std;
class Pair{
    string str;
    int num;
public:
    Pair(string s, int n):str(s), num(n)
    {}
    Pair(const Pair &a)
    {
        str = a.str;
        num = a.num;
    }
    int Num()
    {
        return num;
    }
    string Str() const{
        return str;
    }
    void set(string s, int n)
    {
        str = s;
        num=n;
    }
    void print() const{
        cout<<"n"<<num<<" "<<str;
    }
};
bool comparator( Pair a,  Pair b)
{
    return a.Num()<=b.Num();
}
int main() {
    int n;
    cin >> n;
    vector<Pair> arr;
    for(int a0 = 0; a0 < n; a0++){
        int x;
        string s;
        cin >> x >> s;
        if((a0+1)<=n/2)
            s="-";
        Pair p(s, x);
        arr.push_back(p);
    }
    cout<<"n Before sort";
    for(auto i:arr)
        i.print();
    stable_sort(arr.begin(), arr.end(), comparator);
    cout<<"nn After sort";
    for(auto i:arr)
        i.print();
    return 0;
}

结果:排序之前0-6-0-6-4-0-6-0-6-0-4那3是0至1是5个问题1或2不4是2至4

排序之后0至0-0-0-0-0-1或1是2至2不3是44是4那4-5个问题6-6-6-6-

comp-比较函数对象(即满足比较要求的对象(,如果第一个参数小于第二个参数(即之前订购(,则返回true。

来自stable_sort。比较器必须实现严格的弱排序。另请参阅此处的确切要求表。

您的比较器是错误的,它也返回相等的元素。

最新更新