【发布时间】:2021-01-14 19:20:50
【问题描述】:
This 的帖子提出了一个问题,即 C++ 中无序容器的比较运算符不存在 >、< ..。从回复来看,拥有这些似乎毫无意义。
但是,我检查了 Python 并看到 set 类型支持子集和超集操作。 Python set 是一个哈希表。我们可以轻松做到:
{'1', '6', 't', 'j'} > {'1', '6', 'j'} # superset
True
{'1', '6', 'j', 't'} < {'1', '6', 'j'} # subset
False
如何在 C++ 中为哈希表 (std::unordered_set) 实现比较运算符?或者我们必须坚持std::set 才能进行除平等之外的任何比较?
【问题讨论】:
-
您仍然可以根据需要定义自己的自定义关系。
-
您不能为
std类型添加运算符重载,因为ADL 将找不到它们(并且您不能向命名空间std添加任何内容)。你可以实现一个函数或函数对象。 -
std::setuses lexicographic comparison。您可以考虑使用std::lexicographical_compare` 来实现与std::unordered_set相同的效果。
标签: python c++ hash set unordered