Search code examples
c++qtqmap

Does QMap support custom comparator functions?


I couldn't find a way to set a custom comparator function for QMap, like I can for std::map (the typename _Compare = std::less<_Key> part of its template arguments).

Does QMap have a way to set one?


Solution

  • It's not documented (and it's a mistake, I think), but in you can specialize the qMapLessThanKey template function for your types (cf. the source). That will allow your type to use some other function rather than operator<:

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

    Nonetheless, std::map has the advantage that you can specify a different comparator per each map, while here you can't (all maps using your type must see that specialization, or everything will fall apart).