10

我找不到为 设置自定义比较器函数的方法QMap,就像我可以为std::maptypename _Compare = std::less<_Key>其模板参数的一部分)一样。

有没有QMap办法设置一个?

4

3 回答 3

15

它没有记录(我认为这是一个错误),但是您可以qMapLessThanKey为您的类型专门化模板功能(参见源代码)。这将允许您的类型使用其他功能,而不是operator<

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

尽管如此, std::map 的优点是您可以为每个 map指定不同的比较器,而在这里您不能(使用您的类型的所有映射都必须看到该专业化,否则一切都会崩溃)。

于 2013-07-04T07:33:15.270 回答
1

不,据我所知,QMap 没有该功能,它要求它是具有 operator< 的键类型,因此如果您确实需要该比较功能,您将被 std::map 困住。

于 2013-07-04T07:21:13.133 回答
1

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

万一,超载operator<()

于 2013-07-04T07:23:35.603 回答