ホームページ  >  記事  >  バックエンド開発  >  STL ソートを使用してリストを降順に並べ替えると、「'__last - __first' に 'operator-' と一致するものがありません」というメッセージが表示されるのはなぜですか?

STL ソートを使用してリストを降順に並べ替えると、「'__last - __first' に 'operator-' と一致するものがありません」というメッセージが表示されるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 18:16:02903ブラウズ

Why am I getting

STL ソート関数を使用したリストのソート

STL ソート関数を使用してリストを降順にソートすると、コンパイル エラーが発生する場合がありますリストに構造体の項目が含まれており、コンパレータ関数が適切に定義されていない場合。 「'__last - __first' で 'operator-' に一致しません」というエラーは、並べ替え関数がリスト内の要素の順序を決定できないことを示します。

この問題は、並べ替え関数がランダム アクセス反復子を必要とするために発生します。 std::list::iterator はそうではありません。リスト反復子は双方向反復子であり、2 つの反復子の差異を直接計算できません。これにより、並べ替え関数が並べ替えられる要素の範囲を正しく計算できなくなります。

この問題を解決するには、std::sort の代わりに std::list::sort メンバー関数を使用する必要があります。関数。 std::list::sort 関数は双方向反復子を使用し、構造体を含むリストの並べ替えを処理できます。

std::list::sort の使用方法の例を次に示します。リストを降順に並べ替える関数:

Result.poly.sort([](const term& t1, const term& t2) { return t2.pow < t1.pow; });

このカスタム コンパレータ関数はリストを適切に並べ替えます。各構造体の pow フィールドに基づいて降順で並べられた構造体の数。

以上がSTL ソートを使用してリストを降順に並べ替えると、「'__last - __first' に 'operator-' と一致するものがありません」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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