Сортировка вектора структур на основе одного из элементов - PullRequest
0 голосов
/ 18 апреля 2019

Я писал программу для ввода оценок n учащихся по четырем предметам, а затем определяю рейтинг одного из них на основе общего количества баллов (из codeforces.com: https://codeforces.com/problemset/problem/1017/A)..отметки в структуре помогут отслеживать различные предметы.

Теперь я просто внедрил сортировку пузырьков по вектору при проверке общего значения. Я хочу знать, есть ли способ, которым яможно отсортировать вектор только по одному из членов структуры, используя std::sort()? Кроме того, как сделать его убывающим?

Вот как выглядит код прямо сейчас:

//The Structure
struct scores
{
    int eng, ger, mat, his, tot, rank;
    bool tommyVal;
};

//The Sort (present inside the main function)
    bool sorted = false;
    while (!sorted)
    {
        sorted = true;
        for (int i = 0; i < n-1; i++)
        {
            if (stud[i].tot < stud[i + 1].tot)
            {
                std::swap(stud[i], stud[i + 1]);
                sorted = false;
            }
        }
    }

На всякий случай, если вам интересно, мне нужно найти звание ученика по имени Томас, поэтому для этого я установил значение tommyVal true для его элемента, а для остальных - значение false.Кстати, я легко могу найти метки Томаса, даже если его местоположение в векторе изменилось после сортировки по их суммарным меткам.

Также приятно знать, что std::swap() работает для сваппиТакже целые структуры.Интересно, какие еще структуры данных он может поменять.

1 Ответ

0 голосов
/ 18 апреля 2019

std::sort() позволяет вам дать ему предикат, чтобы вы могли выполнять сравнения по своему усмотрению, например:

std::sort(
  stud.begin(),
  stud.begin()+n, // <-- use stud.end() instead if n == stud.size() ...
  [](const scores &a, const scores &b){ return a.tot < b.tot; }
);

Просто используйте return b.tot < a.tot, чтобы изменить порядок сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...