Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127

Сортировка стуктур.Как при сортировке одного поля менять остальные

17.10.2018, 16:43. Показов 1252. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот есть функция сортировки по полю Стоимость.
Структура.
C
1
2
3
4
5
6
7
8
struct Tyru
{
char NAME[20];
int VARTIST;
int TRUVAL;
int DATA[3];
char PLACE[10];
};
Как менять поля которые идут вместе с Стоимостью.
Как при сортировке одного поля менять остальные
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void sortdown(char filename[])
{
    Tyru *s = new Tyru[60];
    int n = 0;
    int x;
    read(s, filename, n);
    for(int i=0;i<n;i++)
 for(int j=0;j<n;j++)
 if(s[i].VARTIST>s[j].VARTIST) {
     x=s[i].VARTIST;
     s[i].VARTIST=s[j].VARTIST;
        s[j].VARTIST=x;
    }
    zapusvfile(s, filename, n);
    delete[]s;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2018, 16:43
Ответы с готовыми решениями:

Вывод строк по сортировке одного поля.
Вот код: #include &quot;stdafx.h&quot; #include &quot;dec.h&quot; void abc_view() { char *result, *pch; char tmpline={0}; ...

Аккордеон, при открытии одного остальные закрываются,как сделать?
Есть очень простой аккордеон, нужно добавить к нему функцию что бы при открытии одной его вкладки остальные автоматически закрывались, как...

Как при редактировании одного столбца менять значения в другом
Не ругайте сильно.. Делаю Web приложение на яве и пока подвис с бд на MySql а именно - Есть две таблицы сотрудники и должность. ну и...

9
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
17.10.2018, 16:44
Перегрузить оператор = или вручную каждое поле менять
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
17.10.2018, 16:53  [ТС]
Я так делал,только мне ошибки выдает.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void sortdown(char filename[])
{
    Tyru *s = new Tyru[60];
    int n = 0;
    int x;
    read(s, filename, n);
    for(int i=0;i<n;i++)
 for(int j=0;j<n;j++)
 if(s[i].VARTIST>s[j].VARTIST) {
     x=s[i].VARTIST;
     s[i].VARTIST=s[j].VARTIST;
        s[j].VARTIST=x;
swap(s[j].NAME, s[j + 1].NAME);
swap(s[j].VARTIST, s[j + 1].VARTIST);
swap(s[j].DATA[0], s[j + 1].DATA[0]);
swap(s[j].DATA[1], s[j + 1].DATA[1]);
swap(s[j].DATA[2], s[j + 1].DATA[2]);
swap(s[j].TRUVAL, s[j + 1].TRUVAL);
swap(s[j].PLACE, s[j + 1].PLACE);
    }
    zapusvfile(s, filename, n);
    delete[]s;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.10.2018, 16:56
ReDoX, зачем? Структуры из POD типов прекрасно копируются по умолчанию. Более того, в строках NAME, например, скопируются все 20 байт, а не только длина строки как в strcpy

проблема аффтара в том, что он слишком много пишет слово VARTIST
x=s[i].VARTIST;
s[i].VARTIST=s[j].VARTIST;
s[j].VARTIST=x;

C++
1
2
3
Tyru     x=s[i];
     s[i]=s[j];
     s[j]=x;
Добавлено через 1 минуту
Цитата Сообщение от gordon8899 Посмотреть сообщение
C++
1
2
3
4
5
6
7
swap(s[j].NAME, s[j + 1].NAME); 
swap(s[j].VARTIST, s[j + 1].VARTIST); 
swap(s[j].DATA[0], s[j + 1].DATA[0]); 
swap(s[j].DATA[1], s[j + 1].DATA[1]); 
swap(s[j].DATA[2], s[j + 1].DATA[2]); 
swap(s[j].TRUVAL, s[j + 1].TRUVAL); 
swap(s[j].PLACE, s[j + 1].PLACE);
не делай так
1
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
17.10.2018, 16:59  [ТС]
Cпасибо все работает)
0
Заблокирован
17.10.2018, 17:41
Может вместо перестановки структур переставлять указатели?
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
#include <iostream>
#include <cstring>
 
struct my_struct {
    char name[20];
    int vartist;
    int truval;
    int data[3];
    char place[10];
};
 
void fill_random(my_struct* data, int size) {
    for (int i = 0; i < size; i++) {
        char* b = (char*)&data[i];
        for (int j = 0; j < sizeof(my_struct); j++) {
            b[j] = rand();
        }
    }
}
 
void sort_my_struct_v1(my_struct* data, int size) {
    clock_t start = clock();
    
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (data[j + 1].vartist < data[j].vartist) {
                std::swap(data[j], data[j + 1]);
            }
        }
    }
    
    clock_t duration = clock() - start;
    std::cout << "duration_v1: " << duration << "\n";
}
 
void sort_my_struct_v2(my_struct* ptr[], int size) {
    clock_t start = clock();
    
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (ptr[j + 1]->vartist < ptr[j]->vartist) {
                std::swap(ptr[j], ptr[j + 1]);
            }
        }
    }
    
    clock_t duration = clock() - start;
    std::cout << "duration_v2: " << duration << "\n";
}
 
int main() {
    const int SIZE = 100;
    my_struct data[SIZE];
    fill_random(data, SIZE);
    
    my_struct data2[SIZE];
    my_struct* ptr[SIZE];
    memcpy(data2, data, SIZE * sizeof(my_struct));
    for (int i = 0; i < SIZE; i++) {
        ptr[i] = &data[i];
    }
 
    sort_my_struct_v1(data, SIZE);
    sort_my_struct_v2(ptr, SIZE);
    
    return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.10.2018, 17:56
stu4ent2018, зачем выпендриваться?
А может вместо массива структур использовать список? (раз уж речь об экономии на копировании зашла?)
А может вместо списка очередь с приоритетом, раз уж речь о сортировке?
Или бинарное дерево? Или сразу реализующие его set или map?
0
Заблокирован
17.10.2018, 18:42
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
stu4ent2018, зачем выпендриваться?
А может вместо массива структур использовать список? (раз уж речь об экономии на копировании зашла?)
А может вместо списка очередь с приоритетом, раз уж речь о сортировке?
Или бинарное дерево? Или сразу реализующие его set или map?
Выше был показан способ ускорения сортировки. Думаю, что использование списков не очень хорошая идея, т.к. время доступа к i-ому элементу будет больше, что скажется на общей производительности. Кроме того, использование всяких структур, на начальных этапах обучения, не даст понимание того, за счёт чего получено ускорение.
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
17.10.2018, 18:47  [ТС]
А не скажете почему сдесь надо писать Tyru?
C
1
2
3
Tyru     x=s[i];
     s[i]=s[j];
     s[j]=x;
0
Заблокирован
17.10.2018, 18:55
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

Цитата Сообщение от gordon8899 Посмотреть сообщение
А не скажете почему сдесь надо писать Tyru?
А не скажете почему здесь надо писать через с?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2018, 18:55
Помогаю со студенческими работами здесь

QToolBar, как, при выборе одного TRIGGERED экшена, гасить все остальные?
Сабж) Есть QToolBar допустим с тремя элементами, которые можно вжать и они остаются в вжатом состояние (triggered). Что - то я не пойму,...

Как сделать выбор нужного поля а потом выбрать остальные поля?
Тоесть выбрать нужную запись WHERE `id` = '6' А потом все остальные кроме выбранной? Использую 2 запроса. Очень не удобно.

Появились сомнения в правильном составлении схемы данных. Смущает что от одного поля (номер) зависят остальные таблицы
После долгих размышлений и как минимум 2 дней переделывания схемы данных, решил спросить у знающих людей. Не могу понять хорошо или плохо,...

сортировка массива стуктур посредством указателей
Доброго времени суток. Есть у меня 1 задачка: пытаюсь её решить: #include&lt;iostream&gt; #include&lt;fstream&gt; using...

Как связать между собой два поля (список значений одного поля зависит от значения другого поля)
Есть таблица: предмет, КодТипаМатериала (список), КодМатериала (список) для примера: стул, ткань, чёрное сукно ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru