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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
08.02.2013, 21:20     Сортировка в Vector #1
Здравствуйте. Сделал что-то типа телефонной книги. Считываю из файла имя, фамилию строками, номер телефона, год рождения - int. Записываю все в один Vector.
Подскажите, как сортировать данные по году рождения и вывести их на экран в нужном порядке.
Я посмотрел, все примеры для сортировки Vectora для нескольких связанных массивов. В один записано, например, имя, в другой фамилия. Видимо нельзя было все в один запихивать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2013, 21:20     Сортировка в Vector
Посмотрите здесь:

C++ Сортировка vector'а
Сортировка массива (vector) C++
Сортировка по одному из полей std::vector C++
сортировка слов vector C++
Сортировка vector и list C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 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
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
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
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
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
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
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
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
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
Еще ссылки по теме:

Sort vector, сортировка по двум полям структуры C++
Сортировка vector C++
Сортировка vector<vector<int>> C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 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:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru