Next_permutation返回奇怪的结果

next_permutation returning strange results

本文关键字:结果 返回 permutation Next      更新时间:2023-10-16

我试图找到给定字符列表的所有排列,在这种情况下'eta'

std::string s="eta";
do
{
    std::cout<<s<<std::endl;
}while(std::next_permutation(s.begin(),s.end()));

,我会得到以下输出:

eta
tae
tea

但是如果我改变一件事

std::string s="eta";

std::string s="aet";

输出现在变成

aet
ate
eat
eta
tae
tea

是我期望的正确排列数;所以当"打乱"字符串按字母顺序排列时,显然发生了一些不同的事情?

或者是什么导致了这种歧义?

next_permutation将序列更改为所有排列的排序顺序中的下一个排列。因此,如果您从不是字典顺序中的第一个排列开始,那么在next_permutation返回false之前,您将只获得所有排列的一部分。

正如同构函数指出的那样,下一个排列在上一个前进的排列上停止。因此,如果您想要所有的字符,只需sort字符列表。

next_permutation将[first, last)范围内的元素重新排列成字典顺序上的下一个更大的元素排列,

所以你的输出没有问题:)

相关文章: