【发布时间】:2012-01-27 06:10:40
【问题描述】:
我现在正在做一些编程练习,尝试在它的第一个“列”上对二维数组进行排序。
我正在从文件中读取输入:
100 5
8 80
5 20
9 40
3 10
6 30
这是我的代码:
#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool helper(vector<long> k, vector<long> l)
{
return (k[0] < l[0]);
}
int main()
{
ifstream fi("milk.in");
ofstream fo("milk.out");
long price = 0, n, m, i, p, a;
vector< vector<long> > farmers;
vector<long> farmer(2,0);
fi >> n >> m;
for (i=0; i<n; ++i)
{
fi >> p >> a;
farmer[0] = p;
farmer[1] = a;
farmers.push_back(farmer);
}
sort(farmers.begin(),farmers.end(),helper);
for (i=0; i<m; ++i)
{
cout << farmers[i][0] << " " << farmers[i][1] << endl;
}
return 0;
}
如您所见,我尝试按输入的第一列对输入进行排序(目前我不关心第一行)。
但是,结果是这样的:
3 10
5 20
6 30
6 30
6 30
这是预期的结果:
3 10
5 20
6 30
8 80
9 40
我想不通。
【问题讨论】:
-
您是否尝试更改文件的第一行?
-
一个不相关的性能问题:您将向量按值传递给比较函数。我建议改为通过 const 引用传递。
标签: c++ arrays sorting vector multidimensional-array