首頁 > 後端開發 > C++ > 如何在 C 中使用對作為無序映射中的鍵?

如何在 C 中使用對作為無序映射中的鍵?

Mary-Kate Olsen
發布: 2024-12-09 07:17:07
原創
719 人瀏覽過

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

在無序映射中使用對作為鍵

嘗試聲明鍵為對的 unordered_map 時 (Vote =pair ;),很多人都會遇到意想不到的情況錯誤:

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'
登入後複製

出現此錯誤是因為 unordered_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 運算子組合該對組件的雜湊值。要使用它,請按如下方式修改 unordered_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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板