Ведро сортирует вектор пар - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужно отсортировать вектор пар с помощью метода сортировки сегментов, но я продолжаю получать сообщения об ошибках. Вектор выглядит следующим образом:

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, где я хотел бы собрать новый отсортированный вектор.

Не могли бы вы мне помочь, пожалуйста?

...