Как отсортировать данные о студентах по фамилиям на C++?
У меня есть vector<string> students, который содержит данные о студентах:
ФИО;курс;группа - так они записанны в виде строк.
Задача - отсортировать этот vector по фамилим студентов. Все никак не могу понять как это правильно сделать, если создать отдельный вектор фамилий и сортировать его, то как связать с остальными данными, помогите пожвлуйста
Ответы (1 шт):
Есть функция std::sort(_RanIt _first, _RanIt _last, _Pr pred) из стандартной библиотеки algorithm. Она принимает три значения: итератор начала сортируемого отрезка, итератор конца и предикат. Предикат - функция возвращающая bool значение. Она используется для сравнения двух элементов отрезка и выполнения сортировки. В данном случае предикат будет такого вида:
bool pred(string str1, string str2) {}
Но можно использовать лямбда выражение и получится:
[](string str1, string str2) {}
Внутри этой функции надо выкусить фамилии из строк и сравнить их. Можно использовать string::substr(size_t _off, size_t count) (где _off - индекс первого символа подстроки, а count - количество символов) и сравнить получившиеся строки, но я использую побуквенное сравнение так как у меня оно уже было написано:
sort(vec.begin(), vec.end(), [](string str1, string str2) {
for (int i = 0; i < str1.find(' '); i++) {
if (tolower(str1[i]) < tolower(str2[i])) return true;
if (tolower(str1[i]) > tolower(str2[i])) return false;
}
if (str1.find(' ') < str2.find(' ')) return true;
return false;
});