【发布时间】: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<比较元素。它还指出“两个范围逐个元素进行比较”、“第一个不匹配的元素定义了哪个范围在字典上小于或大于”和“如果一个范围是另一个的前缀,较短的范围在字典上比另一个less。”据我所知,您链接到的页面回答了您的问题,这就是为什么我要求您具体说明您对哪一部分感到困惑。
标签: c++ vector containers comparison standards