ホームページ > バックエンド開発 > C++ > クラスが「std::map」のキーとして使用されるために満たさなければならないキー要件は何ですか?

クラスが「std::map」のキーとして使用されるために満たさなければならないキー要件は何ですか?

Susan Sarandon
リリース: 2024-12-02 01:29:09
オリジナル
780 人が閲覧しました

What Key Requirements Must a Class Meet to Be Used as a Key in a `std::map`?

std::map のキー要件

クラスが標準ライブラリ std::map で有効なキーであるためには、特定の要件に従う必要があります。これらの要件により、マップ内でキーを確実に順序付けして比較できることが保証されます。

  • コピー可能性と割り当て可能性: キーはコピー可能で、割り当て可能である必要があります。これにより、std::map は比較と内部ストレージ用にキーのコピーを作成できるようになります。
  • 比較演算子: キーは比較演算子を実装する必要があり、通常は < として実装されます。 (未満) または > (より大きい) 演算子。この演算子を使用すると、 std::map がキーの相対的な順序を決定できます。これは、マップの並べ替えられた性質を維持するために不可欠です。
  • Strict Ordering: 比較演算子は、厳密な順序を定義する必要があります。 。 2 つのキー a と b の場合、a a.

カスタム キーの実装

キーとして使用したいクラスがこれらの要件を満たさない場合は、元のクラスを継承し、必要な演算子を実装するラッパー クラス。これは、元のクラスを変更できない場合、または適切な比較演算子が提供されない場合に役立ちます。

次に、単純な構造体の比較演算子を実装するカスタム キー ラッパーの例を示します。

struct MyType {
    // ... original class members
};

struct MyTypeWrapper {
    MyType original;

    bool operator<(const MyTypeWrapper& other) const {
        // ... custom comparison logic
    }
};
ログイン後にコピー

MyTypeWrapper をキーとして使用すると、マップの順序が正しく維持されることを保証しながら、MyType クラスのオブジェクトをマップできます。

以上がクラスが「std::map」のキーとして使用されるために満たさなければならないキー要件は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート