首頁 > 後端開發 > C++ > 為什麼我不能使用 `std::pair` 作為 `std::unordered_map` 中的鍵以及如何修復它?

為什麼我不能使用 `std::pair` 作為 `std::unordered_map` 中的鍵以及如何修復它?

Linda Hamilton
發布: 2024-12-07 02:57:12
原創
851 人瀏覽過

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

為什麼我不能編譯一個以pair為key的unordered_map?

這裡面臨的問題是缺乏合適的雜湊函數對於金鑰類型。若要解決此問題,請為金鑰對提供自訂雜湊函數。這是一個範例:

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

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;  // Simple example, for better results use boost.hash_combine
    }
};

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
登入後複製

使用此自訂雜湊函數,您現在可以建立一個 unordered_map沒有編譯錯誤。請注意,此處提供的雜湊函數出於演示目的而過於簡單化。對於現實場景,請考慮使用 Boost 的 boost.hash_combine 等技術來提高雜湊函數的品質。

以上是為什麼我不能使用 `std::pair` 作為 `std::unordered_map` 中的鍵以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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