std::unordered_set 的 C++ 比较运算符

C++ Comparison operators for std::unordered_set

post 提出了一个问题,即 C++ 中无序容器缺少 >< .. 比较运算符。从回复来看,拥有这些似乎毫无意义。

但是,我检查了 Python 并看到 set 类型支持子集和超集操作。 Python set 是一个散列 table。我们可以轻松做到:

{'1', '6',  't', 'j'} > {'1', '6', 'j'}   # superset
True
{'1', '6', 'j', 't'} < {'1', '6', 'j'}    # subset
False

如何在 C++ 中为散列 table (std::unordered_set) 实现比较运算符?或者我们必须坚持 std::set 进行除相等以外的任何比较?

基于子集关系,

Python 的集合具有偏序,而不是全序。例如。 { 1, 2, 3 } < { 2, 3, 4 }{ 1, 2, 3 } > { 2, 3, 4 } 都不是真的,但是 { 1, 2, 3 } == { 2, 3, 4 } 是假的。

您可以编写一个表现类似的 <,但如评论中所述,您不能将它放在 namespace std 中,因此在某些上下文中找不到它。

我建议改为制作免费功能

template<typename UnorderedContainer>
bool is_proper_subset(const UnorderedContainer & lhs, const UnorderedContainer & rhs);

您还可以为 <=>>=(分别)

template<typename UnorderedContainer>
bool is_subset(const UnorderedContainer & lhs, const UnorderedContainer & rhs);

template<typename UnorderedContainer>
bool is_proper_superset(const UnorderedContainer & lhs, const UnorderedContainer & rhs);

template<typename UnorderedContainer>
bool is_superset(const UnorderedContainer & lhs, const UnorderedContainer & rhs);