Oops, that didn't work... There are duplicates.

I guess I would just use a set like this:

Code:
int main( int argc, char* argv[] )
   {
   std::string alpha = "ABBCCCDD";
   vector<char> elements(alpha.begin(), alpha.end());
   vector<char> results(alpha.length() + 1, 0);
   
   std::set<vector<char> > prevCombos;
   
   int nItems = 3;
   CombinationGenerator<char> CG(elements, nItems);
   
   // Call NextCombination until there are no more combinations
   int nTries = 0;
   while (CG.NextCombination(results))
      {
      if ( ! prevCombos.insert(results).second )
         continue;

      // Output our results
      int nSize = results.size();
      for ( int j = 0; j < nSize; j++ )
         cout << results[j] << " ";
      cout << endl;
      nTries++;
      }
   
   cout << "Number of combinations is " << nTries << endl;
   
   return 0;
   }