天天看點

STL prev_permutation排序算法

next_permutation() 是按照字典升序的方式生成的排列。當我們想以降序的方式生成排列時,可以使用 prev_permutation()。

prev_permutation 和 next_permutation() 一樣有兩個版本,預設使用 < 來比較元素。因為排列是以降序的方式生成的,是以算法大多數時候會傳回 true。當生成最大排列時,傳回 false。例如:

std::vector<double> data {44.5, 22.0, 15.6, 1.5};
do {
    std::copy(std::begin(data), std::end(data), std::ostream_iterator<double> {std::cout, " "});
    std::cout << std::endl;
} while(std::prev_permutation(std::begin(data), std::end(data)));
           

這段代碼會輸出 data 中 4 個 double 值的全部 24 種排列,因為初始序列是最大排列,是以 prev_permutation() 會在輸入最小排列時,才傳回 false。