Мне нужно отсортировать вектор пар с помощью метода сортировки сегментов, но я продолжаю получать сообщения об ошибках. Вектор выглядит следующим образом:
typedef pair<int, int> p;
f >> nodes >> lines;
vector< pair<int, p> > adj;
for (int i = 1; i <= lines; i++) {
f >> x >> y >> weight;
adj.push_back({ weight, {x, y} });
}
Я хотел бы отсортировать по весу.
Например: Input:
3 3
1 2 4
1 3 5
2 3 6
1 2 1
И я хотел бы вывод, как это:
1 2 1, 1 2 4, 1 3 5, 2 3 6
Вот мой код:
int maximum(int n, vector< pair<int, p> > adj ) {
int max = adj[0].first;
for (int i = 1; i < n; i++)
if (max < adj[i].first)
max =adj[i].first;
return max;
}
void BucketSort(int n, vector< pair<int, p> >& adj) {
int k = maximum(n, adj);
vector< pair<int, p> > tmp;
for (int i = 0; i <= k; i++)
tmp.push_back({ 0, {0, 0} });
for (int i = 0; i < n; i++) {
int x= adj[i].first;
tmp[x].first++;
}
int q = 0;
for (int i = 0; i < k; i++) {
for (int j = 0; j < tmp[i].first; j++) {
q++;
adj[q].first = i;
adj[q].second = adj[i].second;
}
}
}
Я получаю сообщение об ошибке «Отладка сработала точку останова» в функции BucketSort в последнем для l oop, где я хотел бы собрать новый отсортированный вектор.
Не могли бы вы мне помочь, пожалуйста?