如何对矢量&lt;进行排序pair <int,int =“”>&gt;?</int,>

时间:2014-05-23 15:06:58

标签: c++ sorting vector stl

我想通过第二个元素对vector进行排序。 代码如下:

#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

我犯了错误?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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