順序なしマップでキーとしてペアを使用する
キーがペアである unowned_map を宣言しようとするとき (Vote = ペア ;)、多くの人が予期せぬ事態に遭遇しますerror:
Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'
このエラーは、unowned_map がそのキー タイプに合わせたハッシュ関数に依存しているために発生します。デフォルトのハッシュ関数はペアには適用できないため、カスタム ハッシュ関数を提供する必要があります。
たとえば、次のカスタム ハッシュ関数 (pair_hash) について考えてみましょう。
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; } };
このハッシュ関数XOR 演算子を使用して、ペアのコンポーネントのハッシュ値を結合します。これを使用するには、unowned_map 宣言を次のように変更します。
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
このアプローチでは、適切なハッシュ関数を提供することで、キーとしてペアを持つ順序なしマップを作成できます。ただし、この単純な実装では最適なハッシュ プロパティが示されない可能性があることに注意してください。結果を改善するには、Boost の hash_combine 関数を検討するか、hash_value を設定することを検討してください。
以上がC で順序なしマップのキーとしてペアを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。