簡體   English   中英

Qt:如何為 QColor 實現 hash function?

[英]Qt: how to implement a hash function for QColor?

我需要使用std::pair<QColor, char>作為unordered_map的鍵。 至於這pair ,我知道有可以使用的增強功能,但是顏色呢? 僅在 std 命名空間中提供 hash 模板就足夠了嗎? 如果是這樣,作為 hash 基礎的顏色的最佳屬性是什么,以最大限度地提高性能並最大限度地減少沖突? 我的第一個想法是關於簡單的name() 如果是這樣

namespace std {
    struct hash<Key>
    {
        std::size_t operator()(const Key& k) const {
            return std::hash<std::string>()(k.name());
    }
}

上面的代碼取自C++ unordered_map,使用自定義 class 類型作為 key

您建議的內容可能會起作用(盡管您必須將顏色名稱從QString轉換為std::string ),我會直接使用顏色的 RGBA 值。 它比必須通過QStringstd::string構造和 hash 計算的 go 便宜一點:

template<>
struct std::hash<QColor>
{
  std::size_t operator()(const QColor& c) const noexcept
  {
    return std::hash<unsigned int>{}(c.rgba());
  }
};

根據 Qt 的文檔, QColor::rgba()返回的QRgb是某種等效於unsigned int的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM