【问题标题】:What does the > operator do when comparing two C++ containers?比较两个 C++ 容器时 > 运算符有什么作用?
【发布时间】:2020-05-14 01:54:53
【问题描述】:

出于某种原因,C++ 中有能力在 C++ 中的容器之间而不是容器元素之间进行大于/小于比较。例如。

std::vector<int> vec1 = {1, 2, 3}, vec2 = {1, 2, 3, 4};
return vec1 > vec2;

cppreference page给出如下解释:

"如果 lhs 的内容在字典顺序上大于 rhs的内容,否则为假"。

在这种情况下,“lexicographically 更大”是什么意思? 这到底有什么用?

【问题讨论】:

  • 大于是什么意思,一个向量项之和更大?还是项目数?
  • 这与总和无关。我们正在查看该序列是否会出现在另一个序列之前,就像我们查看字典一样。
  • 维基百科页面从不建议序列必须由数字或字母组成。它使用“字母表”这个词来指代“一个有限集 A,……它是完全有序的”。这意味着该定义适用于由具有已定义顺序的任何类型元素组成的序列。 cppreference.com 页面声明“比较是由等效于 std::lexicographical_compare 的函数执行的。”
  • 如果您阅读std::lexicographical_compare 上的页面,它指出如果没有指定比较函数,则使用operator&lt; 比较元素。它还指出“两个范围逐个元素进行比较”、“第一个不匹配的元素定义了哪个范围在字典上小于大于”和“如果一个范围是另一个的前缀,较短的范围在字典上比另一个less。”据我所知,您链接到的页面回答了您的问题,这就是为什么我要求您具体说明您对哪一部分感到困惑。

标签: c++ vector containers comparison standards


【解决方案1】:

词汇量更大的含义与字典中的相同。您可以通过将 1,2,3 替换为“abc”并将 1,2,3,4 替换为“abcd”来可视化它。字符串“abcd”稍后会出现在字典中,因为它的词汇量更大。

如果您有 2,2,3(而不是 1,2,3),因为 2 在词汇学上大于 1,> 将返回 true 来比较 2,2,3 和 1,2,3,4。

容器的相对长度无关紧要。我们只关注该序列是否会在另一个序列之前出现在字典中('a' 出现在 'b' 之前,'1' 出现在 '2' 之前)。

这很有用的一个例子是当您需要知道一个序列是否在另一个序列之前。

希望对你有所帮助。

【讨论】:

  • 嗨,这对于非数字/字母数据的向量意味着什么?感谢您的回复。
  • 嗨,没问题。对于非数值数据的向量,这些值将根据其 ASCII 值进行比较,但仍将遵循比较数值时遵循的相同原则。例如,包含 {a,p,p,l,e} 的向量将出现在包含 {o,r,a,n,g,e} 的向量之前,因为 'a' 的 ASCII 值在 ' 的 ASCII 值之前o'。我希望这对你有帮助。如果我能进一步澄清这一点,请告诉我。
  • @boyanhristov96 C++ 标准不要求使用 ASCII 编码。符合标准的实现可以使用字母不按字母顺序排列的编码。
  • 换句话说,它是依赖于实现的?
  • @boyanhristov96 嗨,如果你有一个结构体、类、元组或其他任何不起作用的向量。这就是我要问的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多