ホームページ > バックエンド開発 > C++ > C で順序なしマップのキーとしてペアを使用する方法

C で順序なしマップのキーとしてペアを使用する方法

Mary-Kate Olsen
リリース: 2024-12-09 07:17:07
オリジナル
718 人が閲覧しました

How to Use Pairs as Keys in Unordered Maps in C  ?

順序なしマップでキーとしてペアを使用する

キーがペアである 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> &amp;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 サイトの他の関連記事を参照してください。

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