问题描述
This帖子提出了一个问题,即缺少C ++中无序容器的>
,<
..比较运算符。从答复看来,拥有这些毫无意义。
但是,我检查了Python,发现set
类型支持子集和超集操作。 Python set
是一个哈希表。我们可以轻松做到:
{'1','6','t','j'} > {'1','j'} # superset
True
{'1','j','t'} < {'1','j'} # subset
False
如何在C ++中为哈希表(std::unordered_set
)实现比较运算符?还是我们必须坚持std::set
进行除平等以外的其他比较?
解决方法
Python的集合基于子集关系具有部分顺序,而不是全部顺序。例如。 { 1,2,3 } < { 2,3,4 }
和{ 1,3 } > { 2,4 }
都不为真,但是{ 1,3 } == { 2,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);