QMap是否支持自定义比较器功能?

时间:2013-07-04 07:07:13

标签: c++ qt qmap

我找不到为QMap设置自定义比较器功能的方法,就像std::map(模板参数的typename _Compare = std::less<_Key>部分)一样。

QMap是否可以设置一个?

3 个答案:

答案 0 :(得分:14)

没有记录(and it's a mistake, I think),但您可以专门为您的类型设置qMapLessThanKey模板功能(参见the source)。这将允许您的类型使用其他函数而不是operator<

template<> bool qMapLessThanKey<int>(const int &key1, const int &key2) 
{ 
    return key1 > key2;  // sort by operator> !
}

尽管如此,std :: map的优势在于你可以为每个地图指定一个不同的比较器 ,而在这里你不能(所有使用你的类型的地图必须看到那个专业化,否则一切都会分崩离析。)

答案 1 :(得分:1)

不,据我所知QMap没有这个功能,它需要它的键类型才能有运算符&lt;,所以如果你真的需要比较功能,你就会被std :: map困住。

答案 2 :(得分:1)

QMap的密钥类型必须提供operator<()QMap使用它来保持其项目的排序,并假设两个密钥x和y相等,如果x&lt; y也不是&lt; x是真的。

如果超载operator<()