我需要使用std::pair<QColor, char>作为unordered_map的关键。至于pair,我知道可以使用boost功能,但是颜色呢?仅仅在std名称空间中提供散列模板就足够了吗?如果是这样的话,为了最大限度地提高性能和最大限度地减少冲突,颜色的最佳属性是什么?我的第一个想法是关于简单的name()。如果是的话
namespace std {
struct hash<Key>
{
std::size_t operator()(const Key& k) const {
return std::hash<std::string>()(k.name());
}
}上面的代码取自使用自定义类类型作为键映射。
发布于 2021-11-30 21:15:11
您建议的内容可能会奏效(尽管您必须将颜色名称从QString转换为std::string),我将直接使用颜色的RGBA值。它比必须通过QString到std::string构造和哈希计算要便宜一些:
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。
https://stackoverflow.com/questions/70175131
复制相似问题