为什么C ++容器之间存在比较运算符?

时间:2018-07-14 09:42:07

标签: c++ containers std c++17

我的问题,或更确切地说,是困扰我的问题,是以下代码可以编译:

auto nonsense = std::vector<int>{20,30,40,50} < std::vector<int>{21,29,41,49}

为什么会这样?

比较的含义是什么?

在我看来,这不是显而易见的(又可以是均值比较,所有值之间的比较之和,最大/最小比较,长度比较,分配的整个内存区域的比较...等)比较两个数组”意味着在==!=情况之外,那么为什么这些运算符存在?他们的预期目的是什么?为什么要引入它们,为什么不将它们从标准中删除?

1 个答案:

答案 0 :(得分:3)

首先,std::vector是一个设计良好的结构,尽管此“功能”乍看起来似乎很奇怪,但在标准中存在它是有道理的。

在讨论为什么之前,我们应该首先了解什么

当您使用< <= >= >运算符比较两个向量时,您正在执行lexicographical比较(更确切地说,它实际上是{{ 1}},您可以阅读有关here的信息。

These overloads是与矢量进行比较的简便方法。它对您似乎没有用,但是它是比较两个向量的好方法。如果您对矢量比较有其他想法,则由您决定是否实现。

该标准只能做很多事情,即使它看起来利基或没有用,也总是有一个原因。在这种情况下,这是因为委员会一致认为词典编纂比较最明智的选择是“默认”。