2013-01-03 216 views
2

我试着去找到一个给定角色列表中的所有排列,在这种情况下,“埃塔”next_permutation返回奇怪的结果

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 

这是我的排列期望的正确数量; 因此,当'scrambled'字符串按字母顺序排列时,显然会有不同的发生。

或者什么可能是这种歧义的原因?

+3

在第一行后面添加'std :: sort(s.begin(),s.end());'。 – stefan

回答

8

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

1

next_permutation重新排列范围[第一要素,最后)为元素的字典序下一个更大的排列,

所以没有什么不对您的输出:)

3

由于izomorphius指出,未来的置换在上的最后一个前进置换停止。所以如果你想要所有的人物,简直就是sort的人物列表。