【问题标题】:How to sort vector < pair <int, int> >?如何对向量<对<int,int>>进行排序?
【发布时间】:2014-05-23 15:06:57
【问题描述】:

我想按向量的第二个元素对向量进行排序。 代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(const pair<int,int>&i, const pair<int,int>&j){
    return i.second < j.second;
}

int main()
{
    vector<pair<int,int> >a(100);

    // values for test
    a[0].first=0; a[0].second=21;
    a[1].first=1; a[1].second=100;
    a[2].first=2; a[2].second=100;
    a[3].first=3; a[3].second=30;
    a[4].first=4; a[4].second=17;

    sort(a.begin(),a.end(),compare);

    for(int i=0;i<5;i++)
        cout << a[i].second << " " << a[i].first << endl;
}

程序返回

0 0
0 0
0 0
0 0
0 0

我哪里做错了?

【问题讨论】:

    标签: c++ sorting vector stl


    【解决方案1】:

    由于未分配其余 95 个元素,因此默认为 (0,0)。所以你只需要对前 5 个元素进行排序。

    sort(a.begin(),a.begin()+5,compare);
    

    【讨论】:

    • 可能需要折叠说明原因。
    • 或者初始化为 5 号而不是 100 号。或者完全不考虑大小,只需要 push_back 每一对。
    • @Yakk 说明已添加。
    • @RikayanBandyopadhyay 是的。并不意味着对答案的批评;只是为 OP 列举了更多选项。
    【解决方案2】:

    vector&lt;pair&lt;int, int&gt; &gt; 的排序方式与您使用它的方式相同。但是,您还有另一个问题。此代码 - vector&lt;pair&lt;int,int&gt; &gt;a(100); 创建一个大小为 100 的向量,并用成对的 (0,0) 填充它。因此,当您对其进行排序时,前 5 个元素是 (0,0)

    【讨论】:

      【解决方案3】:

      您的向量大小为 100,但您只填充了 5 个元素。其余的都是 (0, 0),你的 compare() 正确地放在前面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2015-09-03
        • 2019-10-11
        • 2017-12-05
        • 2011-10-05
        • 2013-07-03
        相关资源
        最近更新 更多