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

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

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

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

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

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

Сортировка vector'а - C++
В си можно сортировать массивы используя функцию qsort (и не писать собственных велосипедов). В Си++ такое не проканает в случае сортировки...

Сортировка vector - C++
Здравствуйте. Заполняю вот так vector: std::vector<string> s; s.push_back("Cat"); s.push_back("Dog"); s.push_back("Rotter"); ...

сортировка слов vector - C++
Добрый день, условие задачи: Все слова исходного файла input.txt записать в файл output.txt без повторений, расположив их в порядке...

Сортировка массива (vector) - C++
Мне нужно отсортировать по алфавиту строки. При сортировке нужно учитывать только первые 10 символов из строки. Помогите с функцией.. Вот...

Сортировка vector и list - C++
Здравствуйте. vector<int> функцией STL медленнее сортируется, чем list<int> собственным методом. #include <cstdlib> #include...

Сортировка по одному из полей std::vector - C++
Подскажите пожалуйста! Задача: Имеется класс Person с полями: Family, Name, BirthDay, Sex, ExperienceTime (Фамилия, имя, дата...

Сортировка vector<string> без учёта регистра - C++
Мне нужно отсортировать по алфавиту строки без учёта регистра. Не могу разобраться с понижением регистра #include &quot;stdafx.h&quot; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Сообщений: 161
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
Сообщений: 161
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
Сообщений: 161
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
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 718
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
Сообщений: 161
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++
Поскажите как отсортировать если: struct DATA{ string fir; string sec; double sm; }; vector &lt;DATA&gt; vec; vector...

Сортировка строк двумерного std::vector'а в лексикографическом порядке - C++
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию std::sort() отсортировать строки массива в лексикографическом...

vector - C++
Объявляю двумерный массив следующим образом: vector&lt; vector &lt;int&gt; &gt; m_Mas; Как в таком случае нужно добавлять элементы и обращаться к...

vector - C++
Посоветуйте источник, где можно подробно узнать о векторах. Спасибо.

vector в C++ - C++
Как заполнить vector объектами разных классов, которые наследуются от одного абстрактного класса?


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 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
Ответ Создать тему
Опции темы

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