Я сейчас занимаюсь практикой программирования, пытаясь отсортировать 2D-массив на его первом «столбце».Сортировка многомерного массива C++ странное поведение
Читаю данные из файла:
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;
}
Как вы можете видеть, я пытаюсь разобраться ввод, это первый столбец (я не» t заботиться о первой строке в данный момент).
Однако это результат:
3 10
5 20
6 30
6 30
6 30
Это ожидаемый результат:
3 10
5 20
6 30
8 80
9 40
Я не могу понять это.
вы попробуйте изменить первую строку файла? –
Несвязанная проблема с производительностью: вы переносите векторы в функцию сравнения по значению. Вместо этого я бы предложил пропустить ссылку const. – fredoverflow