ホームページ >バックエンド開発 >C++ >`std::sort` とカスタム コンパレータを使用してリストを降順に並べ替えることができないのはなぜですか?

`std::sort` とカスタム コンパレータを使用してリストを降順に並べ替えることができないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-20 16:53:28495ブラウズ

Why Can't I Sort a List in Descending Order Using `std::sort` and a Custom Comparator?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。