ホームページ > バックエンド開発 > C++ > ペアキーを使用した順序なしマップのコンパイルエラーを解決するにはどうすればよいですか?

ペアキーを使用した順序なしマップのコンパイルエラーを解決するにはどうすればよいですか?

DDD
リリース: 2024-12-16 06:41:25
オリジナル
340 人が閲覧しました

How to Resolve Unordered Map Compilation Errors with Pair Keys?

ペア キーによる順序なしマップのコンパイル エラー

キーがペアである順序なしマップを作成しようとすると、次のエラーが発生する場合があります。 :

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'
ログイン後にコピー

このエラーは、順序なしマップではキーに対してハッシュ関数を定義する必要があるために発生します 種類。一方、ハッシュははデフォルトで使用可能ですが、ペアにはハッシュ関数が提供されていません。

解決策: カスタム ハッシュ関数を提供する

この問題を解決するには、ペアキータイプのカスタムハッシュ関数を定義する必要があります。実装例を次に示します。

struct pair_hash {
    template<class T1, class T2>
    size_t operator()(const pair<T1, T2>& p) const {
        auto h1 = hash<T1>()(p.first);
        auto h2 = hash<T2>()(p.second);
        return h1 ^ h2;
    }
};
ログイン後にコピー

このハッシュ関数は、ビットごとの XOR (^) を使用して、ペアの個々のコンポーネントのハッシュ値を結合します。

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

ハッシュ関数を定義したら、それを使用してペア キーを持つ順序なしマップを作成できます。

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

Unordered_map um;
ログイン後にコピー

この修正により、コンパイルエラーは発生しなくなり、期待どおりに順序なしマップを使用できるようになります。

以上がペアキーを使用した順序なしマップのコンパイルエラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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