首页 > 解决方案 > 什么是相对顺序,stable_partition 有什么作用?

问题描述

所以我得到了这个代码:

#include <vector>
#include <algorithm>

bool isEven(int x) {
    return x % 2 == 0;
}

int main() {

    std::vector<int> vec = {1,7,3,10,9,6};
    std::stable_partition(vec.begin(), vec.end(), isEven);
}

现在我不明白stable_partition和之间的具体区别是什么partition

所以我看了我的书,上面写着:

stable_partition 维护每个分区中元素的相对顺序

但我不明白,元素的相对顺序是什么?

这是否意味着与分区谓词不匹配的元素保持相同的顺序?如果是,如何更改它们std::partition

提前致谢。

标签: c++stl

解决方案


元素的相对顺序只是特定分区内的元素相对于彼此的顺序。

例如,在partitioning之后

{1,7,3,10,9,6}

我们得到:

   {6,10}  {1,3,7,9}   // one of the possible results
// ^^^^^^  ^^^^^^^^^      elements within partition can be in any order

所以不能保证保持相对顺序。请注意,6 在 10 之前,而在 10 之后是在分区之前。

另一方面,如果你做一个stable_partitioning,你会得到:

{10,6} {1,7,3,9}   // only possible result

并且保证每个分区内的相对顺序保持不变。


推荐阅读