我想通过第二个元素对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
我犯了错误?
答案 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()正确放在前面。