next_permutation返回奇怪的结果

cre*_*orn 2 c++ stl permutation

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

std::string s="eta";
do
{
    std::cout<<s<<std::endl;

}while(std::next_permutation(s.begin(),s.end()));
Run Code Online (Sandbox Code Playgroud)

我将得到以下输出:

eta
tae
tea
Run Code Online (Sandbox Code Playgroud)

但如果我改变了一件事

std::string s="eta";
Run Code Online (Sandbox Code Playgroud)

std::string s="aet";
Run Code Online (Sandbox Code Playgroud)

输出现在变成了

aet
ate
eat
eta
tae
tea
Run Code Online (Sandbox Code Playgroud)

这是我期望的正确排列数; 因此,当"加扰"字符串按字母顺序排列时,显然会出现一些不同的情况?

或者这可能是造成这种歧义的原因?

izo*_*ica 8

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