STL Permutations
2003-05-29 00:05:00
Category: cpp:stl
Description: Example on using next_permutation from the stl algorithm library. It will rearrange a string or integer into every unique lexical order.
Author: detour
Viewed: 8584
Rating: (34 votes)


/* permutation.cpp by detour@metalshell.com
 *
 * Example on using next_permitation from the stl
 * algorithm library.  It will rearrange a string or
 * integer into every unique lexical order.
 *
 * http://www.metalshell.com/
 *
 */
 
#include <algorithm>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
  vector<int> v_int;
  char str[] = "mobscene";
 
  v_int.push_back(1);
  v_int.push_back(4);
  v_int.push_back(2);
  v_int.push_back(0);
 
  // Print each unique order of "mobscene"
  while(next_permutation(str, str+strlen(str)))
    cout << str << "\t";
 
  cout << "\n\n";
 
  /* when calling next_permutation you must sort the vector
     values into ascending order for it work. */
  sort(v_int.begin(), v_int.end());
 
  /* Use a do/while loop instead of the normal while loop becuase
     the first entry will be skipped if you call next_permutation
     first */
  int cnt = 0;
  do {
    // There should be n! (4*3*2*1) entries.
    cout << ++cnt << ". ";
 
    // Print out the vector.
    for(unsigned int x = 0; x < v_int.size(); x++)
      cout << v_int[x];
 
    cout << endl;
  } while(next_permutation(v_int.begin(), v_int.end()));
 
 
  return 0;
}