Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 159
#1

Сортировка в Vector - C++

08.02.2013, 21:20. Просмотров 1510. Ответов 10
Метки нет (Все метки)

Здравствуйте. Сделал что-то типа телефонной книги. Считываю из файла имя, фамилию строками, номер телефона, год рождения - int. Записываю все в один Vector.
Подскажите, как сортировать данные по году рождения и вывести их на экран в нужном порядке.
Я посмотрел, все примеры для сортировки Vectora для нескольких связанных массивов. В один записано, например, имя, в другой фамилия. Видимо нельзя было все в один запихивать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
08.02.2013, 21:44     Сортировка в Vector #2
C++
1
sort(data.begin(), data.end(), compare);
где compare - функция-предикат

C++
1
2
3
bool compare (const data& d1, const data& d2) {
    return d1.birthdate < d2.birthdate;  
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 22:05     Сортировка в Vector #3
SummerRain, если у него несколько "параллельных" векторов, то такой вариант применим лишь с костылями.
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 159
08.02.2013, 22:08  [ТС]     Сортировка в Vector #4
Kgfq, поясните
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 22:10     Сортировка в Vector #5
Ryabchik,

C++
1
2
3
4
vector<int> A; // даты
vector<double> B; // количество обработанных кубометров земли (ну любые данные, вообщем)
sort(A.begin(), A.end(), cmp);
// A отсортирован, B - нет
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 159
08.02.2013, 22:12  [ТС]     Сортировка в Vector #6
Kgfq, даты и кубометры в одном Vectore
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 22:13     Сортировка в Vector #7
Ryabchik, покажите код.
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 159
09.02.2013, 16:55  [ТС]     Сортировка в Vector #8
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
 
class Number
{
    public:
    string name;
    string surname;
    int number;
    int birthdate;
};
 
Number t;
 
int main ()
{
    ifstream f ("file.txt");
    vector <Number> telBook;
    while (true)
    {   
        f >> t.name;
        f >> t.surname;
        f >> t.number;
        f >> t.birthdate;
 
        if (f.eof())
        break;
        
        telBook.push_back (t);
    }
}
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.02.2013, 17:19     Сортировка в Vector #9
Ryabchik
сделайте соответствующий предикат для функции std::sort и сортируйте по какому хотите полю

Добавлено через 10 минут
если я ничего не путаю, выглядеть должно так:

C++
1
2
3
4
5
6
...
#include <algorithm>
 
...
 
bool mypredicate (Number first,Number second) { return (first.birthdate<second.birthdate); }
и далее где нужна сортировка:
C++
1
sort (telBook.begin(),telBook.end(),mypredicate);
Ryabchik
18 / 18 / 1
Регистрация: 09.01.2013
Сообщений: 159
09.02.2013, 17:34  [ТС]     Сортировка в Vector #10
abit, спасибо, сейчас попробую

Добавлено через 3 минуты
abit, спасибо, все работает

Добавлено через 8 минут
А почему программа не считывает из файла последнюю строку?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2013, 19:48     Сортировка в Vector
Еще ссылки по теме:

Сортировка vector и list C++
Sort vector, сортировка по двум полям структуры C++
Bind vector<vector<A*>> C++
C++ Сортировка vector<string> без учёта регистра
Сортировка vector C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12510 / 7072 / 794
Регистрация: 27.09.2012
Сообщений: 17,465
Записей в блоге: 2
Завершенные тесты: 1
09.02.2013, 19:48     Сортировка в Vector #11
Цитата Сообщение от Ryabchik Посмотреть сообщение
А почему программа не считывает из файла последнюю строку?
потому что:
C++
1
2
3
        if (f.eof())
        break;        
        telBook.push_back (t);
Yandex
Объявления
09.02.2013, 19:48     Сортировка в Vector
Ответ Создать тему
Опции темы

Текущее время: 18:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru