Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 25.11.2014
Сообщений: 80
1

Сортировка массива (вектора) структур по заданному полю

21.04.2015, 20:11. Показов 1136. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно отсортировать массив по полю структуры. Все поля типа string.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
struct DatabaseData{
    std::string aPointOfDeparture;//Пункт отправления
    std::string destination;      //Пункт назначения
    std::string trainNumber;              //Номер поезда
    std::string departureTime;    //Время отправления
    std::string surname;          //Фамилия и инииалы 
    std::string theTypeOfWagon;   //Тип вагона
    std::string ticketPrice;              //Стоимость билета
};
void filing(){
        /*Запись всех данных в файл*/
        std::ofstream fout("database.txt");
        for (int i = 0; i < MyVecotDb.size(); i++){
            
            fout << MyVecotDb[i].aPointOfDeparture << std::endl;
            fout << MyVecotDb[i].departureTime << std::endl;
            fout << MyVecotDb[i].destination << std::endl;
            fout << MyVecotDb[i].surname << std::endl;
            fout << MyVecotDb[i].theTypeOfWagon << std::endl;
            fout << MyVecotDb[i].ticketPrice << std::endl;
            fout << MyVecotDb[i].trainNumber << std::endl;
        }
        fout.close();
    }
void readingFromAFile(){
        /*Чтение из файла и запись в вектор*/
        DatabaseData pointerDatabaseData;
        std::ifstream fin("database.txt"); // открыли файл для чтения
        for (int i = 0; i < tellFile(); i++){
            fin >> pointerDatabaseData.aPointOfDeparture;
            fin >> pointerDatabaseData.departureTime;
            fin >> pointerDatabaseData.destination;
            fin >> pointerDatabaseData.surname;
            fin >> pointerDatabaseData.theTypeOfWagon;
            fin >> pointerDatabaseData.ticketPrice;
            fin >> pointerDatabaseData.trainNumber;
            MyVecotDb.push_back(pointerDatabaseData);
        }
        fin.close();
    }
void _swap(DatabaseData x1, DatabaseData x2){
        DatabaseData tmp;
        tmp.aPointOfDeparture = x1.aPointOfDeparture;
        x1.aPointOfDeparture = x2.aPointOfDeparture;
        x2.aPointOfDeparture = tmp.aPointOfDeparture;
 
        tmp.departureTime = x1.departureTime;
        x1.departureTime = x2.departureTime;
        x2.departureTime = tmp.departureTime;
 
        tmp.destination = x1.destination;
        x1.destination = x2.destination;
        x2.destination = tmp.destination;
 
        tmp.surname = x1.surname;
        x1.surname = x2.surname;
        x2.surname = tmp.surname;
 
        tmp.theTypeOfWagon = x1.theTypeOfWagon;
        x1.theTypeOfWagon = x2.theTypeOfWagon;
        x2.theTypeOfWagon = tmp.theTypeOfWagon;
 
        tmp.ticketPrice = x1.ticketPrice;
        x1.ticketPrice = x2.ticketPrice;
        x2.ticketPrice = tmp.ticketPrice;
 
        tmp.trainNumber = x1.trainNumber;
        x1.trainNumber = x2.trainNumber;
        x2.trainNumber = tmp.trainNumber;
    }
 
//Вот этот метод сортировки 
    void SortScena(){
        readingFromAFile();
        /*std::sort(MyVecotDb.begin(), MyVecotDb.end(), [](const DatabaseData& a, const DatabaseData& b) {
            return a.ticketPrice < b.ticketPrice;
        */});
        for (int i = 0; i < MyVecotDb.size()-1; i++){
            for (int j = i + 1; j < MyVecotDb.size(); j++){
                if (MyVecotDb[j].ticketPrice > MyVecotDb[i].ticketPrice)
                    _swap(MyVecotDb[j], MyVecotDb[i]);
            }
        }
        filing();
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2015, 20:11
Ответы с готовыми решениями:

Сортировка массива структур по заданному полю
Задание под вариантом такое : Упорядочить список студентов по предмету физика, и вывести весь...

Сортировка массива структур по заданному полю
Здравствуйте. Нужна помощь в сортировке. Вот само задание: Составить таблицу, содержащую...

Сортировка массива(вектора)структур по одному полю
Код:#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; struct...

Сортировка "пузырьком" массива структур по заданному полю
Нужно отсортировать структуру по фамилии доктора, но что то он не сортирует. void...

6
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 21:30 2
C++
1
std::sort(MyVecotDb.begin(), MyVecotDb.end(), [](DatabaseData &a, DatabaseData &b) { return a.aPointOfDeparture < b.aPointOfDeparture; });
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.04.2015, 22:01 3
Можно явно определить
C++
1
2
3
4
bool operator< (const DatabaseData &a, const DatabaseData &b)
{
    return a.aPointOfDeparture < b.aPointOfDeparture;
}
и далее любой сортировкой (хоть пузырьком). Тот же std::sort будет знать как сравнивать объекты.
0
1 / 1 / 0
Регистрация: 25.11.2014
Сообщений: 80
21.04.2015, 22:17  [ТС] 4
MrGluck, c++ ругается. Говорит много параметров в функции операторе operator подчеркивает красным.

Добавлено через 5 минут
MrGluck, если в методе делаю перезагрузку, то говорит после круглых скобок не хватает ";".
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.04.2015, 23:12 5
Цитата Сообщение от fivebits_ Посмотреть сообщение
MrGluck, если в методе делаю перезагрузку, то говорит после круглых скобок не хватает ";".
это должно быть в глобальной области видимости (вне класса и функций).
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 23:17 6
А если понадобится по разным полям сортировать?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.04.2015, 14:19 7
Цитата Сообщение от nmcf Посмотреть сообщение
А если понадобится по разным полям сортировать?
"Если" - это уже другая задача. Здесь этого не нужно, соответственно хватит одного оператора.

"Если понадобится" - можно свой компаратор написать и передавать в функцию. И при этом всё равно оставить вариант "по умолчанию".
0
22.04.2015, 14:19
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.04.2015, 14:19
Помогаю со студенческими работами здесь

Реализовать сортировку массива структур по заданному полю
Помогите правильно отсортировать структуры по среднему балу и записать их в файл структура:...

Std::min_element по заданному полю массива структур
Есть структура Point{double x,y}. Есть вектор vector&lt;Point&gt;. Как правильно определить функцию...

Сортировка массива структур по полю
Дана структура: struct elecHelp1 { char fio, name, sname, nameElection, constituensy; double...

Сортировка массива структур по одному полю
Приветствую. Есть задача, практически аналогичная моей:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru