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

问题描述

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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...