2013-01-03 162 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的人物列表。