Сортировка списка по значению

нужно сортировать данный список по возрастанию стипендии( а после вывести имена студентов в новом порядке). Как это можно сделать? Еще интересно, как при работе листа с типом struct обращаться к переменным.

#include <list>
#include <iostream>

using namespace std;

struct Node {
    int marks[4];
    char name[32];
    int scholarship; // стипендия
    Node(int* marks, char* name, int scholarship) {
        this->marks[4] = marks[4];
        this->name[32] = name[32];
        this->scholarship = scholarship;
    }
};

int main()
{
    setlocale(LC_ALL, "ru");
    char namee[30];
    int volume;
    int mark[4];
    int n;
    list<struct Node> List;
    cout << "Сколько студентов желаете ввести ? "; cin >> n;
    for (int i = 0; i < n; i++) {
        cout << "Введите имя " << i + 1 << " студента: "; cin >> namee;
        cout << "Введите оценки: ";
        for (int j = 0; j < 4; j++) {
            cin >> mark[j];
        }
        cout << "Введите размер стипендии: "; cin >> volume;
        Node node(mark, namee, volume);
        List.push_back(node);
    }
}

Ответы (1 шт):

Автор решения: Harry

Не могу поместиться в комментарий, отвечу про list::sort() здесь.

Чтобы отсортировать list<Node> нужно передать в функцию sort() соответствующий компаратор. Как сказано, его сигнатура должна быть подобна

bool cmp(const Type1 &a, const Type2 &b);

т.е. никаких указателей! В вашем случае это

bool foo(const Node& a, const Node& b) { return a.scholarship < b.scholarship; }

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

List.sort(foo);
→ Ссылка