STL ソート関数を使用したリストの並べ替え
リストにカスタム構造体のオブジェクトが含まれている場合、降順でのリストの並べ替えの実装は困難になる可能性があります。ただし、発生した問題、「'__last - __first' で 'operator-' に一致しない」という問題は、選択した並べ替えアプローチに関するより深刻な問題を明らかにしています。
提供された SortDescending 構造体は、2 つを比較する演算子を正しく定義しています。ただし、t2.pow
この問題は、std::sort がランダム アクセス反復子を必要とするが、リスト反復子では提供されないという事実に起因します。 std::list のような双方向反復子を使用すると、リスト内を移動できますが、直接アクセスやポインター演算を実行するために必要な機能が不足しています。
STL の並べ替え関数を使用してリストを並べ替えるには、ランダムアクセス反復子が使用可能である必要があります。別のアプローチは、メンバー関数 std::list::sort を使用することです。この関数は引数としてコンパレータ関数を受け入れ、カスタマイズされた並べ替え基準を定義できます。
この場合、次のコードは項の累乗に基づいてリストを降順に並べ替えます。
Result.poly.sort([](const term& t1, const term& t2) { return t1.pow > t2.pow; });
正しいイテレータと適切な並べ替え関数を使用すると、リストを目的の順序で効果的に並べ替えることができます。
以上が`std::sort` とカスタム コンパレータを使用してリストを降順に並べ替えることができないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。