Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
#1

Сортировка по имени и по дате - C++

15.05.2016, 17:34. Просмотров 338. Ответов 16
Метки нет (Все метки)

Подскажите пожалуйста как реализовать сортировку по имени и по дате для вот такого класса.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    
}
 
class CName
{
private:
    string fname;
    string sname;
    string lname;
 
public:
    CName(string f1name,string s1name,string l1name)
    {
        fname=f1name;
        sname=s1name;
        lname=l1name;
    }
};
class CDate
{
 private:
     int day;
     int month;
     int year;
 public:
    CDate(int day1,int month1,int year1)
    {
        day=day1;
        month=month1;
        year=year1;
    }
};
class CHuman
{
private:
    CName name;
    CDate datebirth;
public:
    CHuman(CName name1,CDate date1)
    {
        name=name1;
        datebirth=date1;
    }
    void sortByName(CHuma[] human)
{
 
}
void sortByDate(CHuman[] human)
{
 
}
};

http://www.cyberforum.ru/cpp-beginners/thread743056.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2016, 17:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка по имени и по дате (C++):

Не работает сортировка по дате
#include&lt;iostream&gt; #include&lt;locale&gt; #include&lt;cstring&gt; #include&lt;string.h&gt;...

Сортировка структур по дате
Дан массив записей, содержащих дату (число, месяц год) и время (часы минуты...

Сортировка студентов по дате рождения
Всем привет. Нужно сортировать студентов по дате рождения. Вот мой код. Че то...

Сортировка файлов по дате изменения
Выводятся файлы на Listbox1 С++ listBox1-&gt;Items-&gt;Clear();...

Сортировка по дате рождения данных в классе
В классе хочу отсортировать людей по дням, месяцам и годам рождения сразу, но...

16
nmcf
6238 / 5550 / 2525
Регистрация: 14.04.2014
Сообщений: 23,337
15.05.2016, 17:38 #2
Тебе сначала надо определить методы для доступа к полям класса. После используй std::sort() с соответствующим выражением.
0
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
15.05.2016, 17:42  [ТС] #3
nmcf, геттеры полей классов CDate и CName!?
а какой-то пример этого std::sort() можно?

Добавлено через 1 минуту
nmcf, и как правильно перевести дату в милисекунд?
0
nmcf
6238 / 5550 / 2525
Регистрация: 14.04.2014
Сообщений: 23,337
15.05.2016, 17:46 #4
CName и CDate проще сделать структурами. Зачем так классы?
Как-то так, без учёта доступности полей:
C++
1
std::sort(human, human + len, [](const CHuman & h1, const CHuman & h2){ return h1.name.lname + h1.name.sname + h1.name.fname < h2.name.lname + h2.name.sname + h2.name.fname; });
Добавлено через 1 минуту
Цитата Сообщение от Raketa Посмотреть сообщение
и как правильно перевести дату в милисекунд?
Это необходимо?
1
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
15.05.2016, 17:52  [ТС] #5
nmcf, ну я думал просто дату переводить в милисекунди и так сравнивать..но уже ненужно тогда...спасибо
0
nmcf
6238 / 5550 / 2525
Регистрация: 14.04.2014
Сообщений: 23,337
15.05.2016, 18:23 #6
Ты устанешь вычислять високосные годы и прочее. Достаточно преобразовать дату в число и после сравнивать:
C++
1
int n = year * 10000 + month * 100 + day;
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
15.05.2016, 18:46 #7
nmcf, почему тогда не qsort?
Raketa, std::sort() не стабильная сортировка
можно использовать
std::stable_sort();
а вообще для строк radixsort нужны
0
nmcf
6238 / 5550 / 2525
Регистрация: 14.04.2014
Сообщений: 23,337
15.05.2016, 20:17 #8
SergioO, что даст стабильность в данном случае? qsort - древняя функция из C.
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
15.05.2016, 20:29 #9
Цитата Сообщение от nmcf Посмотреть сообщение
SergioO, что даст стабильность в данном случае?
как-то принято чтобы
Иванов Алексей
Иванов Петр
было, а не наоборот.
Цитата Сообщение от nmcf Посмотреть сообщение
qsort - древняя функция из C
в 1960 году разработана Хоаром, исследована Кнутом и Сэджвик диссер защищал по ней.
вообще-то самая эффективная сортировка для чисел (исключая некоторые крайние случаи, которые тоже можно предусмотреть).
для строк лучше MSD, LSD либо трехчастная qsort()
0
nmcf
6238 / 5550 / 2525
Регистрация: 14.04.2014
Сообщений: 23,337
15.05.2016, 20:39 #10
Цитата Сообщение от SergioO Посмотреть сообщение
как-то принято чтобы
Иванов Алексей
Иванов Петр
было, а не наоборот.
Оно так и будет. Надо же все поля использовать.
Цитата Сообщение от SergioO Посмотреть сообщение
в 1960 году разработана Хоаром, исследована Кнутом и Сэджвик диссер защищал по ней.
Ну и что? Почему ты считаешь, что std::sort() хуже? Сложность такая же в описании.
0
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
26.05.2016, 12:55  [ТС] #11
nmcf,вот так кажется эти гетты...а что сделать с этой сортировкой..подскажите пожалуйста...а то эти функции так и не смог приспособить сюда
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
#include <iostream>
 
using namespace std;
 
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
 
class CName
{
private:
    string fname;
    string sname;
    string lname;
 
public:
    CName(string f1name,string s1name,string l1name)
    {
        fname=f1name;
        sname=s1name;
        lname=l1name;
    }
    string GetFName()
    {
        return fname;
    }
    string GetSName()
    {
        return sname;
    }
    string GetLName()
    {
        return lname;
    }
};
class CDate
{
 private:
     int day;
     int month;
     int year;
 public:
    CDate(int day1,int month1,int year1)
    {
        day=day1;
        month=month1;
        year=year1;
    }
    int GetDay()
    {
        return day;
    }
    int GetMonth()
    {
        return month;
    }
    int getYear()
    {
        return year;
    }
};
class CHuman
{
private:
    CName name;
    CDate datebirth;
public:
    CHuman( CName* name1, CDate* date1)
    {
        
        name=name1;
        datebirth=date1;
    }
    void sortByName()
{
 
}
void sortByDate()
{
 
}
};
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
26.05.2016, 14:55 #12
SergioO, стабильность подразумевает сохранение последовательности одинаковых элементов. Ваш пример с Ивановым не в тему.

Правильнее будет объявить в каждом классе operator < и применить обычный std::sort.
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
26.05.2016, 15:34 #13
Цитата Сообщение от castaway Посмотреть сообщение
стабильность подразумевает
я знаю что подразумевает стабильность
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
26.05.2016, 15:35 #14
Цитата Сообщение от SergioO Посмотреть сообщение
я знаю что подразумевает стабильность
Ну тогда больше не пишите глупости.
0
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
26.05.2016, 15:51  [ТС] #15
SergioO, castaway, спасибо конечно что вы нашли над чем подискутировать..но можно какие -то советы или примери
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
26.05.2016, 16:00 #16
Цитата Сообщение от Raketa Посмотреть сообщение
но можно какие -то советы
Цитата Сообщение от castaway Посмотреть сообщение
Правильнее будет объявить в каждом классе operator < и применить обычный std::sort.
Чем не совет?
0
Raketa
0 / 0 / 5
Регистрация: 31.01.2015
Сообщений: 192
29.05.2016, 12:31  [ТС] #17
castaway, вот так я вот сделал...но выдает ошибки вот такие чего оно хочет ||=== Build: Debug in HumanSort (compiler: GNU GCC Compiler) ===|
include\CHuman.h|87|error: expected ',' or '...' before 'st'|
include\CHuman.h|99|error: expected ',' or '...' before 'st'|
include\CHuman.h||In member function 'void CHuman::SortName(CHuman*)':|
include\CHuman.h|89|error: 'st' was not declared in this scope|
include\CHuman.h|96|error: 'st' was not declared in this scope|
include\CHuman.h||In member function 'void CHuman::SortDate(CHuman*)':|
include\CHuman.h|101|error: 'st' was not declared in this scope|
include\CHuman.h|109|error: 'st' was not declared in this scope|
include\CHuman.h||In member function 'bool Date::isOlder(Date&)':|
include\CHuman.h|43|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build failed: 6 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

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
void SortName(CHuman[] st)
{
    for(int i=0;i<sizeof(st)-1;i++)
        for(int j=0;j<sizeof(st)-i-1;j++)
        {
            if(st[j].GetLName()>st[j+1].GetLName())
                st[j].Swap(st[j+1]);
        }
          cout<<endl;
    for(int i=0;i<sizeof(st);i++)
        cout<<st[i];
}
void SortDate(CHuman[] st)
{
     for(int i=0;i<sizeof(st)-1;i++)
        for(int j=0;j<sizeof(st)-i-1;j++)
        {
            if(!st[j].isOlderD((st[j+1].GetDate())))
                st[j].Swap(st[j+1]);
        }
 
    cout<<endl;
    for(int i=0;i<sizeof(st);i++)
        cout<<st[i];
}
0
29.05.2016, 12:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2016, 12:31
Привет! Вот еще темы с решениями:

Сортировка по дате рождения (структура note)
Добрый вечер! На моих примерах программа сработала, но есть подозрение, что я...

Сортировка списка студентов по дате рождения (файл)
Очень нужна помощь умельцев. Помогите пожалуйста отсортировать по дате...

Лексикографическая сортировка по имени
Привет всем форумчанам! Вот у меня такая проблемка: нужно реализовать...

Сортировка по фамилии и имени в С++
Добрый день, подскажите пожалуйста как реализовать. Задание следующие, у нас...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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