是否可以将QColor作为关键存储在QMap中

cas*_*rad 3 c++ qt qmap qcolor

所以,我有简单的代码

QMap<QColor, int> colors;
for(int w = 0; w < image.width(); ++w)
    for (int h = 0; h < image.height(); ++h)
        colors[QColor::fromRgb(image.pixel(w,h))]++;
Run Code Online (Sandbox Code Playgroud)

错误消息是

不匹配'operator <'(操作数类型是'const QColor'和'const QColor').

因此,qMapLessThanKey尝试实例化两种颜色的比较器是不成功的,这是不可能的.

问题是:是否可以将QColor作为值存储在QMap中,而不是通过引用?

只是好奇.我知道如何以其他方式写出我想要的东西.但奇怪的是,在QT中我可以存储在地图中或不能存储的任何例外情况.

Sho*_*hoe 5

没有,因为QColor不提供operator<,这是需要通过QMapKey类型:

a的密钥类型QMap必须提供operator<()指定总订单.

一个选项是operator<QColor自己定义,但我不建议,因为我不确定它应该被定义.

我建议只使用std::map自定义比较器(第三个模板参数)沿着以下行:

struct color_compare {
    bool operator()(QColor const&, QColor const&) { /* ... */ }
};

std::map<QColor, Value, color_compare> map;
// ...
Run Code Online (Sandbox Code Playgroud)