ホームページ >バックエンド開発 >C++ >`std::unowned_map` のキーとして `std::pair` を使用できない理由とその修正方法

`std::unowned_map` のキーとして `std::pair` を使用できない理由とその修正方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 02:57:12854ブラウズ

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

キーとしてペアを使用して unowned_map をコンパイルできないのはなぜですか?

ここで直面している問題は、適切なハッシュ関数がないことですキーの種類については。これを解決するには、ペア キーにカスタム ハッシュ関数を提供します。以下に例を示します。

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

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;  // Simple example, for better results use boost.hash_combine
    }
};

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

このカスタム ハッシュ関数を使用すると、unowned_map を作成できるようになります。コンパイルエラーなし。ここで提供されるハッシュ関数は、デモンストレーションを目的として簡略化されていることに注意してください。実際のシナリオでは、Boost の boost.hash_combine などの手法を使用して、ハッシュ関数の品質を向上させることを検討してください。

以上が`std::unowned_map` のキーとして `std::pair` を使用できない理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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