Сортировка записей в структуре
Добавлено: 03 янв 2015, 22:16
Вывести список на экран, упорядочив фамилии авторов в алфавитном порядке.
сама структура:
− фамилия и инициалы автора (строка 15 символов);
− название книги (строка 20 символов);
− год издания (целое положительное четырехзначное число);
− количество страниц (целое положительное число).
Не понимаю как мне написать код сортировки полей, в приложенном коде сортировка написана на С++11 а мне надо на С++
сама структура:
− фамилия и инициалы автора (строка 15 символов);
− название книги (строка 20 символов);
− год издания (целое положительное четырехзначное число);
− количество страниц (целое положительное число).
Код: Выделить всё
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
struct Book
{
std::string authorData;
std::string bookName;
size_t year;
size_t pagesCount;
};
int main()
{
size_t booksCount;
std::cout << "N: ";
std::cin >> booksCount;
std::vector <Book *> booksVector;
for (size_t i = 0; i < booksCount; i++) {
std::cin.clear();
std::cin.sync();
Book *currentBook = new Book();
std::cout << "Book #" << (i + 1) << ":" << std::endl;
std::cout << "Author: ";
std::getline(std::cin, currentBook->authorData);
std::cin.clear();
std::cin.sync();
std::cout << "Book name: ";
std::getline(std::cin, currentBook->bookName);
std::cin.clear();
std::cin.sync();
std::cout << "Book year: ";
std::cin >> currentBook->year;
std::cout << "Pages count: ";
std::cin >> currentBook->pagesCount;
booksVector.push_back(currentBook);
std::system("cls");
}
std::sort(booksVector.begin(), booksVector.end(), [](Book *leftBook, Book *rightBook) -> bool {
return (leftBook->authorData < rightBook->authorData);
});
for (Book *currentBook : booksVector) {
std::cout << "Author: " << currentBook->authorData << std::endl;
std::cout << "Book name: " << currentBook->bookName << std::endl;
std::cout << "Book year: " << currentBook->year << std::endl;
std::cout << "Pages count: " << currentBook->pagesCount << std::endl;
std::cout << std::endl;
}
std::system("pause");
return 0;
}
Код: Выделить всё
std::sort(booksVector.begin(), booksVector.end(), [](Book *leftBook, Book *rightBook) -> bool {
return (leftBook->authorData < rightBook->authorData);