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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.81
m1x
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 173
23.05.2011, 19:13     Сортировка данных в структуре #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
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "StdAfx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
 
 
using namespace std;
 
 
struct NOTE {
    char surname[20]; 
    char name[10]; 
    int phone;
    char birthday[10]; 
} ;
 
void main () 
{
     NOTE base[4];
int i,j;
for(i=0; i<4;i++) { 
    cout<<"\nSurname: ";
    cin>>base[i].surname;
    cout<<"\nName: ";
    cin>>base[i].name;
    cout<<"\nPhone: ";
    cin>>base[i].phone;
    cout<<"\nBirthday: ";
    cin>>base[i].birthday;
}
    
 
for(i=0; i<4;i++) { 
    cout<<"Surname: "<<base[i].surname<<" Name: "<<base[i].name<<" Phone: "<<base[i].phone<<" Birthday: "<<base[i].birthday<<endl;
 
}
system("Pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 19:13     Сортировка данных в структуре
Посмотрите здесь:

C++ Сортировка в структуре
Сортировка данных в Структуре С++ C++
Сортировка в структуре C++
C++ Сортировка по фамилии в структуре
C++ Сортировка в структуре
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
23.05.2011, 19:17     Сортировка данных в структуре #2
m1x, выбираете один из методов сортировки. И сортируете по полю
C++
1
base.phone
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2011, 19:20     Сортировка данных в структуре #3
Или так
C++
1
2
3
4
5
6
7
8
9
struct NOTE {
        char surname[20]; 
        char name[10]; 
        int phone;
        char birthday[10]; 
        bool operator< (const NOTE& a) const{
          return phone < a.phone;
        }
} ;
И потом тупо
std::sort, только лучше вместо массива вектор использовать
Серега 11.09
-37 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 10
23.05.2011, 20:46     Сортировка данных в структуре #4
спасибо за помошь
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
25.05.2011, 19:14     Сортировка данных в структуре #5
C
1
2
3
4
5
int cmp(const void* a, const void* b) {
    return ((NOTE*)a)->phone-((NOTE*)b)->phone;
}
 
    qsort(base,4,sizeof(base[0]),cmp);
вот тебе на С
Серега 11.09
-37 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 10
25.05.2011, 19:19     Сортировка данных в структуре #6
спасибо тебе.....
zhvaka
0 / 0 / 0
Регистрация: 29.01.2011
Сообщений: 40
20.09.2011, 17:41     Сортировка данных в структуре #7
Здравствуйте, не подскажите как сделать qsort сортировку по дате рождения ?
Пузырём это выглядит примерно так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int BigDate1, BigDate2, i, j;
            NOTE temp;
        for(i=0;i<N-1;i++)
    {
        for(j=0;j<N-1;j++)
        {
            BigDate1 = BN[j].BDAY[2]*10000 + BN[j].BDAY[1]*100 + BN[j].BDAY[0];
            BigDate2 = BN[j+1].BDAY[2]*10000 + BN[j+1].BDAY[1]*100 + BN[j+1].BDAY[0];
            if(BigDate1 > BigDate2)
            {
                        temp=BN[j];
                        BN[j]=BN[j+1];
                        BN[j+1]=temp;
            }
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 17:45     Сортировка данных в структуре
Еще ссылки по теме:

C++ Сортировка string по алфавиту в структуре
Сортировка и поиск данных в структуре C++
C++ Сортировка в структуре

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
20.09.2011, 17:45     Сортировка данных в структуре #8
zhvaka, смотри документацию по qsort:
Код
QSORT(3)                                                                  Руководство программиста Linux                                                                  QSORT(3)



ИМЯ
       qsort - сортировка массива

ОБЗОР
       #include <stdlib.h>

       void qsort(void *base, size_t nmemb, size_t size,
                  int(*compar)(const void *, const void *));

ОПИСАНИЕ
       Функция qsort() сортирует массив из nmemb размером size. Аргумент base указывает на начало массива.

       Содержимое  массива  сортируется в соответствии с функцией сравнения, на которую ссылается compar, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые
       объекты.

       Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент  меньше,  равен  или  больше  второго  соответственно.  Если  оба
       элемента сравнения равны, порядок их сортировки в массиве не будет определен.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       Функция qsort() ничего не возвращает.

СООТВЕТСТВИЕ СТАНДАРТАМ
       SVr4, 4.3BSD, C89, C99.

ЗАМЕЧАНИЯ
       Для  использования  compar  подходят  библиотечные  процедуры, включая alphasort(3) и versionsort(3). Для сравнения C-строк в качестве функции сравнения можно использовать
       strcmp(3), как это указано ниже.

ПРИМЕР
       Для примера использования смотрите пример, указанный в bsearch(3).

       Еще один пример программы, сортирующей строки, переданные в качестве аргументов через командную строку:

       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       static int
       cmpstringp(const void *p1, const void *p2)
       {
           /* Аргументами данной функции являются "pointers to
              pointers to char", однако аргументами strcmp(3)
              являются "pointers to char", так что здесь происходит
              преобразование и разыменовывание ссылок */

           return strcmp(* (char * const *) p1, * (char * const *) p2);
       }

       int
       main(int argc, char *argv[])
       {
           int j;

           if (argc < 2) {
            fprintf(stderr, "Usage: %s <string>...\n", argv[0]);
            exit(EXIT_FAILURE);
           }

           qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);

           for (j = 1; j < argc; j++)
               puts(argv[j]);
           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ
       sort(1), alphasort(3), strcmp(3), versionsort(3)



                                                                                    2009-09-15                                                                            QSORT(3)
Тебе нужно реализовать функцию-компаратор, которая принимает два нетипизированных указателя на объекты твоей структуры и должна возвращать отрицательное число, если первый объект меньше второго, 0, если они равны, и положительное число, если первый объект больше второго. Естественно, перед непосредственным сравнением нужно скастовать указатели к соответствующим типам. Выше есть пример.
Yandex
Объявления
20.09.2011, 17:45     Сортировка данных в структуре
Ответ Создать тему
Опции темы

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