2012-05-09 49 views
5

是有一種簡單的方法來使next_permutation以執行相同的一組互換的大小相同 的兩個不同的陣列例如 如果我有兩個陣列a[]={1,2,3,4,5}b[]={12,23,21,2,3} 如果在排列1中的排列1到第3個位置之後,然後排列b中的12也應該排到第3個位置。相同排列使用next_permutation()STL

回答

4

你可以讓一個輔助指標集:

int a[] = { 1, 2, 3, 4, 5 }; 
int b[] = { 12, 23, 21, 2, 3 }; 

std::size_t indices[] = { 0, 1, 2, 3, 4 }; 

現在上indices進行排列,然後用a[indices[i]]b[indices[i]]

1

請記住,std :: next_permutation不保留任何狀態(這將違背stl算法的概念)。那麼它如何產生下一個排列呢?它通過元素的順序來完成它。這就是爲什麼有一個接受比較運算符的版本

如果您給它一個大小爲N的排序數組,那麼next_permutation可以被稱爲N!倍。否則,在算法返回false之前,您的置換次數較少。

要回答你的問題,如果數組與上面提出的「輔助索引集」有相同的順序,那麼相同的元素將被交換。

實施例:

int a[] = { 1, 2, 4, 3 }; 
int b[] = { 11, 12, 14, 13 }; 

這些將被置換的相同,因爲排序將產生相同的索引排序。