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

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

Войти
Регистрация
Восстановить пароль
 
NeZ
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 10
#1

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

27.11.2012, 19:39. Просмотров 1137. Ответов 3
Метки нет (Все метки)

Доброго времени суток, дорогие форумчане!

Возникла следующая проблема. Нужно отсортировать структуру по полю типа 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++
Имеется структура данных: название института, номер корпуса, название кафедры и телефон кафедры. Требуется реализовать поиск по 3-м...

Сортировка в линейной структуре данных - C++
Данные хранятся в бинарном файле записей, а для обработки считываются в связанный список. При выходе из программы обработанные данные...

Сортировка в структуре - C++
По заданию нужно ввести данные в структуре, отсортировать по цене (от наименьшей к наибольшей) и вывести. На сортировке засыпался, прошу...

Сортировка в структуре - C++
Структура: struct Worker { string Name; int Year; status Status; ...

Сортировка в структуре - C++
Надо отсоритровать структуру по параметру &quot;Телефон&quot; Листал форум, вроде все написано правильно, сортировку делаю &quot;пузырьком&quot;, но выводит...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
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
Спасибо! Сейчас попробуем!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2012, 14:49     Сортировка данных в Структуре С++
Еще ссылки по теме:

Сортировка в структуре - C++
Нужно создать структуру, вбить туда инфу: имя, факультет, группа, пропусков. вывести список у кого больше пропусков (отсортировать пожалуй,...

Сортировка в структуре - C++
Нужно считать в структуру информацию из файла, и отсортировать по зарплате. В файле записана информацию: Имя, год рождения, и зарплата. Со...

Сортировка по фамилии в структуре - C++
Посмотрите пожалуйста структуру Студент! Нужно сделать сортировку по фамилии.Думаю, что с функцией strcmp что-то не так... Задание:...

Сортировка в структуре по отдельным полям - C++
#include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include...

Сортировка string по алфавиту в структуре - C++
Итак, задача считать информацию из файла, в формате string\t char\t int\n и отсортировать в алфавитном порядке по первому значению в строке...

Сортировка в структуре (ошибка в коде) - C++
void sort () { setlocale(LC_ALL, &quot;Russian&quot;); int lo; cout&lt;&lt;endl&lt;&lt;&quot;Введите: &quot;&lt;&lt;endl; ...


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

Или воспользуйтесь поиском по форуму:
_Alexander
12 / 12 / 1
Регистрация: 05.11.2012
Сообщений: 49
28.11.2012, 14:49     Сортировка данных в Структуре С++ #4
ИМХО, проще воспользоваться перегрузкой оператора присваивания?
Yandex
Объявления
28.11.2012, 14:49     Сортировка данных в Структуре С++
Ответ Создать тему
Опции темы

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