非順序マップのキーとしてペアを使用できますか?
C では、ペアを指定した unowned_map を使用するとコンパイル エラーが発生する可能性があります。その鍵。この問題は、カスタム タイプに適切なハッシュ関数を提供せずに、カスタム タイプをキーとして利用することで発生します。
エラーについて
発生するエラーは、unowned_map が依存しているためです。キーと値のペアを効率的に見つけるためのハッシュ メカニズムに基づいています。ただし、ペアのような複合型用のデフォルトのハッシュ関数がありません。エラー メッセージは、コンパイラがペア キー タイプの未定義のハッシュ関数を暗黙的にインスタンス化できないことを示しています。
解決策: ハッシュ関数の提供
この問題を解決するには、投票ペア タイプの一意のハッシュ値を計算するハッシュ関数を定義する必要があります。この関数は、引数としてペアを受け入れ、ハッシュ値を出力する必要があります。
ハッシュ関数の実装例を次に示します。
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; } };
このハッシュ関数を使用すると、コードを変更して、ペアをキーとして使用する unowned_map:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
これで、この unowned_map を意図したとおりに使用でき、コンパイルを回避できます。エラー。
以上がC の順序なしマップでペアをキーとして使用できますか?またその方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。