STD的C++比较运算符:无序序集

2024-05-16 22:09:31 发布

您现在位置:Python中文网/ 问答频道 /正文

波斯特提出了一个缺少{}、{}的问题。。C++中无序容器的比较运算符。从答复来看,拥有这些似乎毫无意义

但是,我检查了Python,发现set类型支持子集和超集操作。Pythonset是一个哈希表。我们可以轻松做到:

{'1', '6',  't', 'j'} > {'1', '6', 'j'}   # superset
True
{'1', '6', 'j', 't'} < {'1', '6', 'j'}    # subset
False
如何在C++中实现哈希表(^ {< CD5>})中的比较运算符?或者我们必须坚持使用std::set来进行除相等之外的任何比较


Tags: falsetrue类型运算符容器子集supersetstd
1条回答
网友
1楼 · 发布于 2024-05-16 22:09:31

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

相关问题 更多 >