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

Сортировка данных в Структуре С++ - C++

Восстановить пароль Регистрация
 
NeZ
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 10
27.11.2012, 19:39     Сортировка данных в Структуре С++ #1
Доброго времени суток, дорогие форумчане!

Возникла следующая проблема. Нужно отсортировать структуру по полю типа int
Сама структура:
C++
1
2
3
4
5
6
7
8
9
10
11
struct Worker
{
    char fname [32];
    char lname [32];
    char sex [8];
    int year;
    int wage;
    int pension;
 
};
Worker group[100];
А именно wage(зарплата). Сортировать можно в любом порядке. Четкого условия нет

Мысли: Сортировать в цикле. Просто поменять 2 значения местами нельзя, ведь нарушится запить. Т.е сначала "работник" был с одной зарплатой, а потом стал с другой.
Копировать нужно структуру целиком.
C++
1
2
3
4
5
6
7
8
9
for ( int i = 0; i < s; i++) // нужен еще один цикл, ибо он не отсортирует с первого раза
    {
        int wage1 = group[i].wage;
        int wage2 = group[i+1].wage;
            
        if ( wage1 > wage2 )
        {
                       ......
                }
Вопрос: можно ли это сделать вот так?
C++
1
2
3
4
group[s+1] = group[i];
group[i] = group[i+1];
group[i+1] = group[s+1];
//где s количество записей ( "работников" ) s+1 для того, чтобы не затереть последнюю запись. Места хватает
Или нужно именно каждое поле отдельно копировать?
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
int tmp = 0;
                char strtmp[100];
                
                strcpy( strtmp, group[i].fname ); //фамилии
                strcpy ( group[i].fname, group[i+1].fname );
                strcpy ( group[i+1].fname, strtmp );
 
                strcpy( strtmp, group[i].lname ); //имена
                strcpy ( group[i].lname, group[i+1].lname );
                strcpy ( group[i+1].lname, strtmp );
 
                strcpy( strtmp, group[i].sex ); //пол
                strcpy ( group[i].sex, group[i+1].sex );
                strcpy ( group[i+1].sex, strtmp );
                
                tmp = group[i].year;// дата
                group[i].year = group[i+1].year;
                group[i+1].year = tmp;
 
                tmp = group[i].wage;// зарплата
                group[i].wage = group[i+1].wage;
                group[i+1].wage = tmp;
 
                tmp = group[i].pension;// пенсия 1 || 0
                group[i].pension = group[i+1].pension;
                group[i+1].pension = tmp;
Возможно напутал чего-то, сильно не пинайте, учусь

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

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 19:39     Сортировка данных в Структуре С++
Посмотрите здесь:

C++ Сортировка в структуре
Сортировка данных в структуре C++
Сортировка в структуре C++
C++ Сортировка по фамилии в структуре
C++ Сортировка в структуре
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
27.11.2012, 20:11     Сортировка данных в Структуре С++ #2
Присваивать можно.

C++
1
group[s+1] = group[i];
Компилятор вставит код, аналогичный функции memcpy. Но при присваивании структур нужно быть осторожным, если в их составе есть указатели. Так как memcpy.
NeZ
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 10
28.11.2012, 06:33  [ТС]     Сортировка данных в Структуре С++ #3
Спасибо! Сейчас попробуем!
_Alexander
12 / 12 / 1
Регистрация: 05.11.2012
Сообщений: 49
28.11.2012, 14:49     Сортировка данных в Структуре С++ #4
ИМХО, проще воспользоваться перегрузкой оператора присваивания?
Yandex
Объявления
28.11.2012, 14:49     Сортировка данных в Структуре С++
Ответ Создать тему
Опции темы

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