This post raised a question of the absence of >
, <
.. comparison operators for unordered containers in C++. From the reply it looks meaningless to have those.
However, I checked Python and see that set
type supports subset and superset operations. Python set
is a hash table. We can easily do:
{'1', '6', 't', 'j'} > {'1', '6', 'j'} # superset
True
{'1', '6', 'j', 't'} < {'1', '6', 'j'} # subset
False
How to implement comparison operators in C++ for hash table (std::unordered_set
)? Or we do have to stick to std::set
for any comparison other than equality?
Python's sets have a partial order, not a total order, based on the subset relation. E.g. neither
{ 1, 2, 3 } < { 2, 3, 4 }
nor{ 1, 2, 3 } > { 2, 3, 4 }
are true, but{ 1, 2, 3 } == { 2, 3, 4 }
is false.You can write a
<
that behaves like that, but as noted in the comments, you can't put it innamespace std
, so it won't be found in some contexts.I'd advise instead making a free function
You could also make variations for
<=
,>
and>=
(respectively)