Python C++;std::无序_集的比较运算符
波斯特提出了缺少Python C++;std::无序_集的比较运算符,python,c++,hash,set,unordered,Python,C++,Hash,Set,Unordered,波斯特提出了缺少,{'1','6','j'}#超集 真的 {'1','6','j','t'}
,{'1','6','j'}#超集
真的
{'1','6','j','t'}<{'1','6','j'}#子集
假的
如何在C++中实现哈希表中的比较运算符(<代码> STD:unOrdEdStEng/<代码>)?或者我们必须坚持使用
std::set
进行除相等以外的任何比较?Python的集合基于子集关系具有部分顺序,而不是总顺序。例如,{1,2,3}<{2,3,4}
和{1,2,3}>{2,3,4}
都不是真的,但是{1,2,3}=={2,3,4}
是假的
您可以编写一个基于子集关系的Python集合的偏序,而不是总序。例如,
{1,2,3}<{2,3,4}
和{1,2,3}>{2,3,4}
都不是真的,但是{1,2,3}=={2,3,4}
是假的
您可以编写
您仍然可以根据需要定义自己的自定义关系。您不能为std
类型添加运算符重载,因为ADL将找不到它们(并且您不允许向命名空间std
添加任何内容)。您可以通过实现函数或函数对象。您可以研究使用`来实现std::unordered_set
的相同功能。您仍然可以根据需要定义自己的自定义关系。您不能为std
类型添加运算符重载,因为ADL将找不到它们(并且您不允许向命名空间std
添加任何内容)。您可以通过实现函数或函数对象。您可以研究使用`来实现与std::unordered_set
相同的功能。
{'1', '6', 't', 'j'} > {'1', '6', 'j'} # superset
True
{'1', '6', 'j', 't'} < {'1', '6', 'j'} # subset
False
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);