next_permutation返回奇怪的结果

时间:2013-01-03 14:47:18

标签: c++ stl permutation

我试图找到给定字符列表的所有排列,在本例中为'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

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

或者造成这种歧义的原因是什么?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

正如izomorphius指出的那样,下一个排列在最后推进的排列上停止。因此,如果您想要所有这些,只需sort字符列表。

答案 2 :(得分:1)

next_permutation将范围[first,last]中的元素重新排列为按字典顺序排列的元素的下一个更大的排列,

所以输出没有问题:)

相关问题