Qt:如何为QColor实现一个散列函数?

Qt: how to implement a hash function for QColor?

我需要用std::pair<QColor, char>作为unordered_map的key。至于pair,我知道有boost功能可以用,但是颜色呢?仅在 std 命名空间中提供哈希模板就足够了吗?如果是这样,那么作为哈希基础的颜色的最佳属性是什么,以最大限度地提高性能并最大限度地减少冲突?我的第一个想法是关于简单 name()。如果是

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

以上代码摘自C++ unordered_map using a custom class type as the key.

您的提议可能会奏效(尽管您必须将颜色名称从 QString 转换为 std::string),我会直接使用颜色的 RGBA 值。它比必须通过 QStringstd::string 构造和哈希计算便宜一点:

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

根据 Qt 的文档,QRgb returned by QColor::rgba() 是某种等同于 unsigned int 的类型。