ペア キーによる順序なしマップのコンパイル エラー
キーがペアである順序なしマップを作成しようとすると、次のエラーが発生する場合があります。 :
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 サイトの他の関連記事を参照してください。