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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 72, средняя оценка - 4.92
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
#1

Сортировка массива структур... - C++

23.02.2010, 14:45. Просмотров 10537. Ответов 19
Метки нет (Все метки)

Здравствуйте! Не могли бы вы выложить примеры или кинуть ссылочку на интересную статью по сортировке массива структур. Имеется массив структур, каждая структура из 5 полей, где 1 - символьное, а остальные - вещественные числа. Необходимо организовать сортировку данного массива структур по каждому из полю. Как сортировать обычные массивы я знаю, а вот массивы структур не получается. Например, сортировка строк с помощью qsort подходит только для двумерных массивов, здесь же не робит(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2010, 14:45     Сортировка массива структур...
Посмотрите здесь:

Сортировка массива структур - C++
Помогите с сортировкой даных в массиве структур. Мне нужно реализовать сортировку по любому заданному полю. Вот программа: ...

Сортировка массива структур - C++
Не могу понять как отсортировать массив структур по убыванию, попробовал несколько алгоритмов,но не получается....программа должна выводить...

Сортировка массива структур - C++
Дана структура WORKER и массив из 10 стркутур. Нужно 1)сортировать список 2) вывести на экран рабочих чей стаж больше числа введённого с...

Сортировка массива структур - C++
Разьясните пожалуйста в как можно поступить по другому. Не выделяя, как у меня дополнительный массив. #include<iostream> const...

Сортировка массива структур - C++
Имеется массив структур, который необходимо отсортировать по числовому ключу. Я написал код, но он не работает, поэтому просьба указать на...

Сортировка массива структур - C++
Имеется структура : struct Data_base { string team_name; string city; int scored_goals; int missed_goals;...

Сортировка массива структур - C++
Здравствуйте! Помогите пожалуйста реализовать сортировку массива структур по полю "date" (все записи должны быть отсортированны по дате)....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 14:53     Сортировка массива структур... #2
Здесь можно посмотреть алгоритмы сортировки.
Попробуй сортировать массив таким образом:
  1. Сначала отсортируй массив структур по первому полю
  2. Затем уже отсортированный массив отсортируй по второму полю
  3. И т.д.
  4. Отсортируй массив по последнему полю
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 15:00  [ТС]     Сортировка массива структур... #3
Ну эт я примерно понимаю, ток реализовать никак не могу. Возьмём, например, сортировку пузырьком. То вместо:
Код
void bubbleSort(T a[], long size) {
мне надо писать:
Код
void bubbleSort(T moya_structura[].moe_pole, long size) {
И потом вызывать функцию так:
Код
bubbleSort(moya_structura.moe_pole, razmer_massiva)
Или не так?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 15:07     Сортировка массива структур... #4
WiDe, нет, не так. Тебе нужно будет передавать в не отдельное поле, а сам массив структур. И нужно будет немного переписать функцию, т.к. обычный массив и массив структур - это не одно и то же
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 15:15  [ТС]     Сортировка массива структур... #5
Код
template<class T>
void bubbleSort(T a[], long size) {
  long i, j;
  T x;

  for( i=0; i < size; i++) {
    for( j = size-1; j > i; j-- ) {
      if ( a[j-1].pole_1 > a[j].pole_1 ) {
      x=a[j-1].pole_1;
      a[j-1].pole=a[j].pole_1;
      a[j].pole_1=x;

      x=a[j-1].pole_2;
      a[j-1].pole=a[j].pole_2;
      a[j].pole_2=x;
    }
  }
}
}
А так? Т.е. типа если у нас в структуре 2 поля, и сортируем мы по первому, то, если выполняется условие, меняются местами оба поля структуры. Или опять не там мыслю?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 15:24     Сортировка массива структур... #6
У тебя поля структуры меняться местами не могут, у тебя меняются местами сами структуры в массиве. И у тебя будет уже не шаблон функции:
C++
1
void bubbleSort(MyStruct &s[], size_t size);
Добавлено через 1 минуту
И при каждой сортировке ты производишь ее только по одному полю, ты не можешь сравнивать одно поле с другим, ты сравниваешь одинаковые поля разных экземпляров структур
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 15:27  [ТС]     Сортировка массива структур... #7
Цитата Сообщение от Nameless One Посмотреть сообщение
void bubbleSort(MyStruct &s[], size_t size)
а здесь поподробнее можно? Я так понял тут MyStruct - название самой структуры, а s - объявленный массив типа MyStruct, ну а size это кол-во элементов массива...?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 15:31     Сортировка массива структур... #8
Да, здесь ты передаешь ссылку на массив структур s типа MyStruct, вторым параметром ты передаешь размер size этого массива
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 15:39  [ТС]     Сортировка массива структур... #9
Спасибо, сейчас попробую...

Добавлено через 7 минут
Не пойму на что ругается:
Код
[C++ Error] Unit1.cpp(27): E2023 Array of references is not allowed
По моему из-за size_t, так как он его жирным не выделил, как слово void, например. Я кодю на Borland C++ Builder.

Хотя нет, из-за &. Убрал, компилятор успокоился...
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 15:45     Сортировка массива структур... #10
Цитата Сообщение от WiDe Посмотреть сообщение
[C++ Error] Unit1.cpp(27): E2023 Array of references is not allowed
Запрещены массивы ссылок


Цитата Сообщение от WiDe Посмотреть сообщение
По моему из-за size_t, так как он его жирным не выделил, как слово void, например. Я кодю на Borland C++ Builder.
Нет, size_t - это стандартный тип (беззнаковое целое)
Попробуй так:
C++
1
void bubbleSort(MyStruct &(*s), size_t size);
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 15:53  [ТС]     Сортировка массива структур... #11
Не, тоже не робит... Работает только так:
Код
void bubbleSort(MyStruct s[], size_t size);
Всё, сделал сортировку, получилось!
Спасибо тебе огромное за помощь! Теперь вот как сортировать поля, которые типа char???
Nick Alte
Эксперт С++
1628 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
23.02.2010, 15:57     Сортировка массива структур... #12
А лучше - просто
C++
1
void bubbleSort(MyStruct s[], size_t size);
Так даже будет работать.

хм... опоздал...

В общем, открой для себя "прелести" std::sort и индексов. std::sort (подключать <algorithm>) позволяет сортировать что угодно. Надо только написать операцию сравнения "меньше". А индекс - это массив номеров, который используется для доступа.
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
23.02.2010, 16:00  [ТС]     Сортировка массива структур... #13
Код
void bubbleSort(line temp[], size_t size) {
  long i, j;
  line x;

  for( i=0; i < size; i++) {            // i - íîìåð ïðîõîäà
    for( j = size-1; j > i; j-- ) {     // âíóòðåííèé öèêë ïðîõîäà
      if ( temp[j-1].kkal > temp[j].kkal ) {
      x=temp[j-1]; temp[j-1]=temp[j]; temp[j]=x;
    }
  }
}
}
Здесь kkal - это одно из полей из структуры. А как сделать чтобы можно было передавать в функцию это имя, чтобы потом отсортировать другие поля, не создавая функции для каждого из них?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
23.02.2010, 16:03     Сортировка массива структур... #14
WiDe,
Nick Alte, чего-то я намудрил

Цитата Сообщение от WiDe Посмотреть сообщение
Спасибо тебе огромное за помощь! Теперь вот как сортировать поля, которые типа char???
Функция strcmp

Добавлено через 2 минуты
Код
int strcmp(
   const char *string1,
   const char *string2 
);
Return Value
The return value for each of these functions indicates the lexicographic relation of string1 to string2.

Value
 Relationship of string1 to string2
 
< 0
 string1 less than string2
 
0
 string1 identical to string2
 
> 0
 string1 greater than string2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2010, 16:05     Сортировка массива структур...
Еще ссылки по теме:

Сортировка массива структур - C++
Ругается на использование структуры, соответственно не работает вся программа. Задача: отсортировать массив по типу культур. struct...

Сортировка массива структур - C++
Разработать программу, реализующую сортировку массива структур (50 элементов). В качестве элемента массива выбрать структуру,...

Сортировка массива структур - C++
Есть файл с текстом(this is spartaaaaaa!), нужно посчитать количество повторений каждого символа, вывести все это в консоль, затем...

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

Сортировка массива структур - C++
Господа есть массив структур, необходимо его отсортировать по полю name с помощью функции qsort. Вроде как написал без ошибок, но...


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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1628 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
23.02.2010, 16:05     Сортировка массива структур... #15
Если у тебя есть массив A размером N, то индекс I - это массив целых чисел того же размера. Изначально ты заносишь туда последовательные значения от 1 до N - это номера. А потом сортируешь уже сам индекс так, чтобы порядок номеров в нём определял порядок сортировки. То есть, значения в A как были неупорядочены, так и идут, но если ты идёшь по индексу последовательно, то выбранные соответствующие значения (A[I[i]]) будут упорядочены. Преимущество в том, что для одного массива структур ты можешь иметь несколько индексов, которые указывают порядок сортировки по разным полям.
Yandex
Объявления
23.02.2010, 16:05     Сортировка массива структур...
Ответ Создать тему
Опции темы

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