ホームページ >バックエンド開発 >C++ >順序なしマップでペアをキーとして使用するには?

順序なしマップでペアをキーとして使用するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 06:55:09216ブラウズ

How to Use Pairs as Keys in Unordered Maps?

順序なしマップのキーとしてのペアについて

ペアをキーとして使用して順序なしマップを作成しようとすると、コンパイルが発生する可能性がありますエラー。このエラーは、カスタム キー タイプのペアに適切なハッシュ関数がないことが原因で発生します。

この問題を解決するには、std::unowned_map でユーザーがキー タイプ専用に設計されたハッシュ関数を提供する必要があります。この関数は、キーを一意の識別子にマッピングする役割を果たします。これは、高速かつ効率的な取得に不可欠です。

カスタム ハッシュ関数の実装

簡単ではありませんが、最適な、std::hash-able 型のペアのハッシュ関数は次のように実装できます。

struct pair_hash {
    template <class T1, class T2>
    std::size_t operator()(const std::pair<T1, T2>& p) const {
        auto h1 = std::hash<T1>()(p.first);
        auto h2 = std::hash<T2>()(p.second);
        return h1 ^ h2; // Combine the hashes using a simple XOR
    }
};

カスタム ハッシュ関数の使用

ハッシュ関数を定義したら、それを std::unowned_map とともに使用してコンパイル エラーを解決できます。

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

int main() {
    Unordered_map um;
}

代替ソリューション

より広範なサポートとパフォーマンスの向上のために、Boost などのライブラリの利用を検討してください。 Boost は以下を提供します。

  • boost::hash_combine: ハッシュを結合するためのより堅牢な方法
  • set_hash_value 関数: std::pair
のような標準型のハッシュ関数を準備します。

これらのオプションを活用することで、ユーザーはカスタム キー タイプの信頼性の高いハッシュを確実に実行できます。 std::unowned_map により、効率的かつ最適なコード パフォーマンスが可能になります。

以上が順序なしマップでペアをキーとして使用するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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