C ++ stable_sort不稳定?

时间:2018-04-29 11:19:02

标签: c++ stl stable-sort

我正在使用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<<"\n\n 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是 4 4是 4那个 4 - 5个问题 6 - 6 - 6 - 6 -

1 个答案:

答案 0 :(得分:6)

  

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

来自stable_sort

。比较器必须实现严格弱排序。另请参阅here以获取确切要求的表格。

您的比较器错误,对于相同的元素也会返回true。