假设我按特定顺序插入了QList个qStableSort个MyItem
个对象。每个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}}他们仍按时间顺序排列?
答案 0 :(得分:0)
https://en.wikipedia.org/wiki/Category:Stable_sorts
稳定的排序算法使用相等的键(即值)保持记录的相对顺序。也就是说,排序算法是稳定的,如果只有两个记录R和S具有相同的密钥并且R出现在原始列表中的S之前,则R将出现在排序列表中的S之前。
因此qStableSort
中的关键字 stable 正好指的是您所要求的内容。
但请注意,qStableSort
为obsoleted in Qt 5.5
改为使用std :: stable_sort。
使用稳定的排序算法按升序对[开始,结束]范围内的项目进行排序。
如果这两个项目中的任何一项都不是“小于”另一项,那么这些项目就是相同的。在原始容器中出现在另一个之前的项目仍将在排序后首先出现。在对用户可见数据进行排序时,此属性通常很有用。
根据Qt文档,您应该更喜欢使用std::stable_sort