我的问题,或更确切地说,是困扰我的问题,是以下代码可以编译:
auto nonsense = std::vector<int>{20,30,40,50} < std::vector<int>{21,29,41,49}
为什么会这样?
比较的含义是什么?
在我看来,这不是显而易见的(又可以是均值比较,所有值之间的比较之和,最大/最小比较,长度比较,分配的整个内存区域的比较...等)比较两个数组”意味着在==
和!=
情况之外,那么为什么这些运算符存在?他们的预期目的是什么?为什么要引入它们,为什么不将它们从标准中删除?
答案 0 :(得分:3)
首先,std::vector
是一个设计良好的结构,尽管此“功能”乍看起来似乎很奇怪,但在标准中存在它是有道理的。
在讨论为什么之前,我们应该首先了解什么。
当您使用<
<=
>=
>
运算符比较两个向量时,您正在执行lexicographical比较(更确切地说,它实际上是{{ 1}},您可以阅读有关here的信息。
These overloads是与矢量进行比较的简便方法。它对您似乎没有用,但是它是比较两个向量的好方法。如果您对矢量比较有其他想法,则由您决定是否实现。
该标准只能做很多事情,即使它看起来利基或没有用,也总是有一个原因。在这种情况下,这是因为委员会一致认为词典编纂比较最明智的选择是“默认”。