STL对比较 - 第一个元素

时间:2015-06-06 18:25:11

标签: c++ stl

有人可以解释这个paargraph的含义

  

配对的巨大优势在于它们具有内置的操作来比较它们自己。对比是第一到第二要素。 如果第一个元素 s 不等于,则结果将仅基于第一个元素的比较;只有当第一个元素相等时,才会比较第二个元素。对的数组(或向量)可以通过STL内部函数轻松排序。

因此

  

例如,如果要对整数点数组进行排序以使它们形成多边形,最好将它们放入向量<对>,其中向量的每个元素是{极角,{x,y}}。对STL排序功能的一次调用将为您提供所需的点数顺序。

我一直在努力了解这一点 Source

5 个答案:

答案 0 :(得分:4)

考虑operator<查看pair<A,B>,这是一个类似于以下内容的类:

struct pairAB {
    A a;
    B b;
};

您可以将该段直接翻译成代码:

bool operator<(const pairAB& lhs, const pairAB& rhs) {
    if (lhs.a != rhs.a) {         // If the first elements are not equal
        return lhs.a < rhs.a;     // the result will be based on 
    }                             // the comparison of the first elements only

    return lhs.b < rhs.b;         // the second elements will be compared
                                  // only if the first ones are equal.
}

或者,更抽象地思考,这就是词典排序的工作原理。想想你如何订购两个单词。你比较他们的第一个字母 - 如果他们不同,你可以停下来看看哪个更少。如果它们相同,那么你会转到第二个字母。

答案 1 :(得分:2)

第一段说对的排序如下:如果你有(x,y)(z,w),你比较它们,那么它首先检查 x 是否小于(或大于) z :如果是,则第一对比第二对小(或大)。但是,如果 x = z ,那么它将比较 y w 。如果对的第一个元素对于顺序比第二个元素更重要,则可以非常方便地对诸如对向量的排序进行排序。

第二段给出了一个有趣的应用。假设你站在飞机上的某个点上,并且有一个多边形包围着你。然后每个点将有一个角度和一个距离。但是考虑到这些要点,你怎么知道它们应该以什么顺序形成一个多边形(没有纵横交错)?如果以这种格式(角度,距离)存储点,那么你将获得免费的盘旋方向。这实际上相当简洁。

答案 2 :(得分:1)

STL对是将两个对象放在一起的容器。以此为例,

配对a,b;

第一个元素可以通过a.first访问,第二个元素可以通过a.second访问。

第一段告诉我们STL提供内置操作来比较两对。例如,您需要比较'a'和'b',然后首先使用a.first和b.first完成比较。如果两个值相同,则使用a.second和b.second进行比较。由于这是一个内置功能,您可以轻松地将它与STL的内部功能一起使用,如sort,b_search等。

第二段是如何使用它的一个例子。考虑一种您希望对多边形中的点进行排序的情况。您首先要根据它们的极角,然后是x坐标,然后是y坐标对它们进行排序。因此,我们使用{angle,{x,y}}对。因此,任何比较都将首先在角度上进行,然后提前到x值,然后是y值。

答案 3 :(得分:1)

如果要比较姓氏和名字对的简单示例,将会更容易理解。

例如,如果你有成对

{ Tomson, Ann }
{ Smith, Tony }
{ Smith, John }

并希望按升序对它们进行排序,你必须将它们相互比较。

如果比较前两对

{ Tomson, Ann }
{ Smith, Tony }

然后第一对的姓氏大于第二对的姓氏。所以没有必要比较名字。已经清楚这对

{ Smith, Tony }

必须在对

之前
{ Tomson, Ann }

另一方面,如果你比较对

{ Smith, Tony }
{ Smith, John }

然后对的姓氏相等。所以你需要比较对的名字。由于约翰比托尼少,所以很明显这对

{ Smith, John }

将在对

之前
{ Smith, Tony }

虽然姓氏(对的第一个元素)是相同的。

对于这对{ polar angle, { x, y } },如果两个不同对的极值相等,那么将比较{ x, y }一对。因此,如果fird元素(x)等于将比较y(s)。

答案 4 :(得分:0)

实际上当你有一个矢量/数组对时,你不必在使用sort()函数时关心排序,你只需使用sort(v.begin(),v.end()) - &gt ;它将根据第一个元素自动排序,当第一个元素相等时,它们将使用第二个元素进行比较。查看链接中的代码和输出,一目了然。 https://ideone.com/Ad2yVG。{{1}}