Include the conditions default style when comparing equality and calculating the hash to reduce instances of false equivalency.
Then remove the QMap index cache since sorting on a hash an item may still produce unstable results in the somewhat unlikely case of a hash collision and it's going to take a lot of items before building and searching the map starts to be less expensive than a linear scan.