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

C の順序なしマップでペアをキーとして使用できますか?またその方法は?

Linda Hamilton
リリース: 2024-12-16 14:11:10
オリジナル
130 人が閲覧しました

Can I Use Pairs as Keys in C   Unordered Maps, and How?

非順序マップのキーとしてペアを使用できますか?

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 サイトの他の関連記事を参照してください。

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