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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-11 06:55:09209瀏覽

How to Use Pairs as Keys in Unordered Maps?

理解無序映射中的Pair 作為鍵

當嘗試創建以Pair 作為鍵的無序映射時,用戶可能會遇到編譯錯誤。此錯誤是由於自訂鍵類型pair缺少合適的雜湊函數而引起的。

為了解決這個問題,std::unordered_map 要求使用者提供專門為鍵類型設計的雜湊函數。此函數負責將鍵映射到唯一標識符,這對於快速且有效率的檢索至關重要。

實作自訂雜湊函數

一對 std::hash-able類型的最佳雜湊函數可以實作如下:

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; // Combine the hashes using a simple XOR
    }
};

使用自訂雜湊函數

定義雜湊函數後,可以與std:: unordered_map 一起使用來解決編譯錯誤:

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

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

int main() {
    Unordered_map um;
}

替代方案解決方案

為了獲得更廣泛的支援和更好的效能,請考慮使用 Boost 等函式庫。 Boost 提供:

  • boost::hash_combine:更強大的組合雜湊的方法
  • set_hash_value 函數:為std::pair 等標準型別準備散列函數

透過利用這些選項,使用者可以確保std::unordered_map中的自訂鍵類型的可靠散列,實現高效且最佳的程式碼效能。

以上是如何在無序映射中使用對作為鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn