qStableSort是否保留等效元素的顺序?

时间:2016-01-19 17:35:31

标签: c++ qt sorting containers

假设我按特定顺序插入了QListqStableSortMyItem个对象。每个MyItem都有一个关联的timestamp和一些属性p,但不保证是唯一的。

struct MyItem {
    enum MyProperty { ONE, TWO, THREE };

    double timestamp;   //unique
    MyProperty p;       //non-unique

    bool operator<(const MyItem& other) const {
        return p < other.p;
    }
};

假设我按时间顺序添加了100个对象,如果我要在该容器上运行http://forums.codeguru.com/showthread.php?287203-vb6-how-to-open-an-outlook-email-that-s-located-on-the-harddrive&highlight=email(从而按p排序),我是否保证对于给定值{{{ 1}}他们仍按时间顺序排列?

1 个答案:

答案 0 :(得分:0)

https://en.wikipedia.org/wiki/Category:Stable_sorts

  

稳定的排序算法使用相等的键(即值)保持记录的相对顺序。也就是说,排序算法是稳定的,如果只有两个记录R和S具有相同的密钥并且R出现在原始列表中的S之前,则R将出现在排序列表中的S之前。

因此qStableSort中的关键字 stable 正好指的是您所要求的内容。

但请注意,qStableSortobsoleted in Qt 5.5

  

改为使用std :: stable_sort。

     

使用稳定的排序算法按升序对[开始,结束]范围内的项目进行排序。

     

如果这两个项目中的任何一项都不是“小于”另一项,那么这些项目就是相同的。在原始容器中出现在另一个之前的项目仍将在排序后首先出现。在对用户可见数据进行排序时,此属性通常很有用。

根据Qt文档,您应该更喜欢使用std::stable_sort