Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249

Два массива структур. Как объединить?

26.03.2023, 16:20. Показов 4005. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу решить проблему, помогите. Есть 2 массива структур, как второй добавить в первый, т.е. если all[i].name == day{i].name элементы плюсовались, если name нет в первой структуре, то элементы в нее добавлялись

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct StAll
{
    char name[25];
    int ds;
    int rating;
    ..........
};
StAll all[1000];
 
 
struct StDay
{
    char name[25];
    int ds;
    int rating;
    ..........
};
StDay day[10];
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2023, 16:20
Ответы с готовыми решениями:

Как объединить два массива в один?
Вот к примеру есть два массива: int A={1,2,3,4}; int B={5,6,7,8}; Как создать третий массив С , в котором будут содержаться...

Как объединить два динамических массива
,к примеру 1 2 3 5 и 4 5 7 8 9 на выходе 1 2 3 4 5 7 8 9

Как объединить два двумерных массива?
есть массивы А и B как их зделать в C, проста смотрел про одномерные массивы там все както проста но не пордходит к двухмерному даже...

55
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
27.03.2023, 21:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Belju Посмотреть сообщение
для StAll можно и там
Я же говорю - это только пример.
Вам решать, где оно будет.

Цитата Сообщение от Belju Посмотреть сообщение
а для StDay размерность должна быть объявлена глобально
Это не принципиально.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
27.03.2023, 22:10  [ТС]
Ни в коем разе не хочу никого обидеть, наоборот, всем спасибо за желание помочь, но как давно убедился, пока сам не допетришь, результата не будет, то ли тебя не понимают, то ли ты сам не понимаешь о чем речь. поэтому не часто обращаюсь за помощью. Сначала мудрил с этим, хотел подправить под себя:
C++
1
2
3
4
5
6
7
8
//  Добавление элемента в конец массива
int* array=new int[10];
//Заполняем...
int* newArray=new int[11];
for(int i=0; i<10; i++) newArray[i]=array[i];
delete[] array;
array=newArray;
array[10]=element11;
но потом дошло что можно сделать еще проще:
C++
1
2
3
int n; //число ненулевых all
all[n+i].ds = day[i].ds;
...........
Тема закрыта!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.03.2023, 23:19
А как это решает задачу? В массиве место с запасом предусмотрено?
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
27.03.2023, 23:47  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
А как это решает задачу? В массиве место с запасом предусмотрено?
ну разумеется, почти с каждой игрой появляются новые игроки, и они должны добавляться в структуру, в моем примере StAll all[1000], на самом деле StAll all[99999], и наверное придется увеличивать, но думаю перейду на вектора к этому времени
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
28.03.2023, 00:55
Цитата Сообщение от Belju Посмотреть сообщение
думаю перейду на вектора
очень советую изучить это и юзать в своих программах, по началу хотя бы просто как обычные массивы, а дальше уже с STL
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
28.03.2023, 01:06
Цитата Сообщение от Belju Посмотреть сообщение
int n; //число ненулевых all
Собственно это тоже самое, что и здесь
Цитата Сообщение от DrOffset Посмотреть сообщение
size_t aSz = 0; // логический размер массива all
Только индекс вы используете один, а у меня два, по одному на каждый из массивов.
Вообще как применить один индекс из ваших вводных
Цитата Сообщение от Belju Посмотреть сообщение
all[i].name == day{i].name
было неясно, поэтому я счел это просто опечаткой. Два индекса в любом случае безопаснее.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.03.2023, 01:06
Я все понимаю, но я ничего не понимаю.
Это я про текущую задачу.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
28.03.2023, 02:37
Belju, Вы тему закрыли, но снова открылась дискуссия, поэтому разрешите еще пару(сотен) слов

Цитата Сообщение от SmallEvil Посмотреть сообщение
Я все понимаю, но я ничего не понимаю.
в 19 посте , это типа самописная БД и надо добавлять в нее записи в реалтайме. Я понял так...

Belju, кстати RADStudio это же c++Builder? А он вроде умеет работать с БД.

Цитата Сообщение от sdf45 Посмотреть сообщение
юзать в своих программах, по началу хотя бы просто как обычные массивы
Если заменить в коде от DrOffset три строчки, уже получается на векторах, и работает.
C++
1
2
3
4
5
6
//38    
size_t appendDay(std::vector<StAll> &all, size_t allSize,const std::vector<StDay> &day, size_t daySize) {
//58   
 /*static*/ std::vector<StAll> all(allBufSize);
//59  
 /*static*/ std::vector<StDay> day(dayBufSize);
Но можно убрать тогда фикс. размеры массива, и не волноваться в дальнейшем, что они будут превышены.
DrOffset, я прошу прощения если что, взял Ваш код и минимально изменил под вектор,
просто для ТСа, показать что вектор-почти тот же массив. Можно для начала так с ним работать, а потом уже усложняться в итераторы, сортировки и тд и тп.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <vector>
 
struct StAll
{
    std::string name;
    int ds;
    int rating;
 
    StAll& operator+=(StAll const& day) {
        ds += day.ds;
        rating += day.rating;
        return *this;
    }
    StAll& operator=(StAll const& day) {
        ds = day.ds;
        rating = day.rating;
        name = day.name;
        return *this;
    }
};
 
void appendDay(std::vector<StAll> &all, const std::vector<StAll> &day) {
 
    for(size_t j = 0; j < day.size(); ++j) {
        bool notFound = true;
        for(size_t i = 0; i < all.size(); ++i) {
            if(day[j].name == all[i].name) {
                all[i] += day[j];
                notFound = false;
                break;
            }
        }
        if(notFound)
            all.emplace_back(day[j]);
    }
}
 
int main()
{
    /*static*/ std::vector<StAll> all;
    /*static*/ std::vector<StAll> day;
 
// начальные данные
    all.emplace_back(StAll{"1", 2, 3});
    all.emplace_back(StAll{"2", 3, 4});
    all.emplace_back(StAll{"3", 4, 5});
// данные для поиска или вставки
    day.emplace_back(StAll{"1", 1, 1}); // такой уже есть, должен сделать приращение
    day.emplace_back(StAll{"4", 5, 5}); // такого нет, должен добавить
 
// --
    appendDay(all,  day);
// --
 
// вывод:
    for(size_t i = 0; i < all.size(); ++i) {
        std::cout << " name: " << all[i].name
                  << " ds: " << all[i].ds
                  << " rating: " << all[i].rating
                  << '\n';
    }
    return 0;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.03.2023, 02:49
Цитата Сообщение от sdf45 Посмотреть сообщение
в 19 посте , это типа самописная БД и надо добавлять в нее записи в реалтайме.
Все так же туманно.
Тут что не понятно, все непонятно.
Как можно ТС что-то посоветовать, если нет никакой конкретики.
Что за массивы, откуда взялись, какие данные нужны.

Есть только алгоритм слияния структуры : просуммировать два поля.
Все остальное вилами по воде.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
28.03.2023, 02:57  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
Вы тему закрыли, но снова открылась дискуссия, поэтому разрешите еще пару(сотен) слов
я совсем не против дискуссии, поэтому будем считать что тема не закрыта))
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.03.2023, 03:12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <map>
#include <string>
 
using std::map; using std::pair; using std::string;
 
pair<int,int>& insert(map<string, pair<int,int>>& bd, string name, int a, int b){
   auto& p = bd[name];
   p.first += a;
   p.second += b;
   return p; // может еще нужно что то с ним сделать.
}
 
int main(){
    map<string, pair<int,int>> bd;
    insert(bd, "n1", 1, 1);
    insert(bd, "n2", 1, 1);
    insert(bd, "n1", 1, 1);
    insert(bd, "n3", 1, 1);
    insert(bd, "n2", 1, 1);    
    for(const auto& p : bd)
        std::cout << p.first << " : " << p.second.first << ' ' << p.second.second << std::endl;
}
Вот и сказочки конец.
Вообщем, удачи ТС.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
28.03.2023, 18:01  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
кстати RADStudio это же c++Builder? А он вроде умеет работать с БД.
да, в нем есть разные БД, и я пробовал их применить, но бросил, это как с векторами - начинай сначала))
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.03.2023, 18:11
Цитата Сообщение от Belju Посмотреть сообщение
в нем есть разные БД
Не знаю как там в RAD.
Но для локальной bd можно использовать sqlite, без серверов и служб.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
28.03.2023, 18:55  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
для локальной bd можно использовать sqlite, без серверов и служб.
будет время - почитаю
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.03.2024, 15:25  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Не знаю как там в RAD.
Но для локальной bd можно использовать sqlite, без серверов и служб.
Переписал проект с использованием SQLite, и не жаль потраченного времени на изучение FireDAC и SQLite. Все намного упростилось и ускорилось. Совет всем кто еще использует структуры массивов переходить на SQLite, однозначно не пожалеете!!!
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.03.2024, 15:36
Цитата Сообщение от Belju Посмотреть сообщение
Совет всем кто еще использует структуры массивов переходить на SQLite, однозначно не пожалеете!!!
SQLite это для "статичных" БД, которые на диске расположены. Для быстрого динамического доступа к объектам нужна база в оперативной памяти. Юзайте Redis.https://ru.wikipedia.org/wiki/Redis
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2024, 15:36

Как объединить два одномерных массива в один двумерный массив?
можно ли как нибудь объединить два массива в один ДВУМЕРНЫЙ МАССИВ? Заранее спсибо void klava2(int* &amp;a1, int* &amp;b1) { cout...

Объединить два массива
Заданы два одномерных массива действительных чисел различных размеров. Объединить их в один массив, включив второй массив между kм и (k+1)-м

Объединить два массива
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать элементы обоих массивов

Объединить два массива
Даны два одномерных массива. Создать новый массив, в котором сначала будут расположены все элементы второго массива в их первоначальной...

Объединить два массива
Условие В этой задаче от вас требуется написать функцию int* merge_arrays(int* A, int Asize, int* B, int Bsize), которой даются два...


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

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru