0

並べ替えようとしています

std::vector< std::vector< std::string> > perm;

std::sortアルゴリズムヘッダーから使用しようとしています

私はそれを

std::sort( perm.begin(), perm.end(), sortPerms);

これは私のソート関数です:

bool sortPerms (const std::vector<std::string> &i, const std::vector<std::string> &j) {
  for(unsigned int x = 0; x < i.size(); x++) {
    if(i[x] != j[x])
      return false;
  }
  //both are equal
  return true;
}

並べ替えの目的は、std :: uniqueを呼び出して、一意の値を持つベクトルを取得することです。cygwinでgccを使用してコンパイルすると、エラーは発生しませんが、繰り返しが発生します。また、Visual Studio 2010を使用してコンパイルすると、operator<が定義されていないというエラーが発生します。ステップスルーしましたが、定義したものではなく、独自のソート関数を使用しようとしています。

これを修正する方法がわかりません、何か提案はありますか?

その他の詳細:すべてのベクトルが同じサイズになることが保証されています。その目的は、文字列の元のベクトルのすべての順列のベクトルです。各文字列はコマンドであり、これらのコマンドをシャッフルできるさまざまな方法をすべて探しています。だから私は重複を取り除く必要があります。

4

1 に答える 1

3

ソート関数はa < b、ではなく、のときに戻る必要がありa != bます。

また、デフォルトでは、std::vector<>を介した辞書式比較をすでにサポートoperator<している必要があります。これにより、期待どおりの結果が得られます(各要素を、比較に使用される最初の非等価要素と順番に比較します)。http://en.cppreference.com/w/cpp/container/vector/operator_cmpを参照してください

現在のsortPerms関数は、に渡すもののように見えますがstd::unique、に使用される述語とは動作が異なりますstd::sort

于 2012-10-25T00:32:12.767 に答える