C/C++

Двумерный динамический массив с неизвестны количеством столбиков или строк

Добрый день

Поступила такая задача: необходимо запрашивать у пользователя в консоли номинал монеты и его количество например 2 рубля 5 штук
1 рублей 10 штук. Это сделать не сложно, но, как я понимаю ввод должен быть неприрывным и может случится так что я возьму и повторно напишу 2 рубля 6 штук и он должен понять, что номинал в 2 рубля у меня уже есть и в нём уже записанно 5 штук и сделать 5 штук + 6 штук и дополнить, чтобы получилась если так можно выразится некая копилка с возможностью складывать монеты
Как я понимаю правильнее всего было бы сделать это через двумерный массив где в первом столбике например номинал монеты, а во втором его количество, но неизвестно сколько будет строк т. к. 1 рубль 2 рубля 5 рублей 10 рублей 1 копейка, 10 копеек и 50 копеек (там числа типа float). В теории мы могли бы посчитать сколько существует всего монет в РФ с разными номиналами и задать именно столько строк, но мне кажется, что это костальный метод и принимающему задачу это не понравится. Исходя из этого получается что нужно создать двумерный массив с неизвестны размеров ( как я понимаю int** arry) и после как то заносить в него значения динамически с возможностью заносить ещё и ещё разные номиналы монет, пусть даже 2 копейки, но перед этим естветственно чтобы он проверял нет ли такого номинала уже и если есть складывал количество а не записывал и записывал одинаковые номиналы на новую позицию хотя они уже могут там быть

Наработка которая у меня есть находится тут: https://onlinegdb.com/r1pWxLJ_w
и как раз там реализовано всё кроме этой части. Пожалуйста помогите либо решить данное задание, либо хотя бы подсказать методы как это можно сделать. Буду очень благодарен.

В интернете гуглил примеры различных массивов, но везде принцып не такой, везде сначала у пользователя запрашивают сколько будет строк и столбцом и уже в цикле определяют массив по этим данным и заносят в него значения. Все инструкции по "динамическим массивам" приводят меня к тем же результатам, предлагается сначала определить массив int** arry; а после задать ему некоторое значение arry = new int * [10]; что для моей задачи не подходит.

Если например у вас есть идеи как можно решить эту задачу без двумерных динамических массивов, пожалуйста предлагайте, главное чтобы это было в рамках разумного) язык кстати с++, вовремя конечно сказал об этом..
#include <iostream>
#include <map>
#include <conio.h>
using namespace std;
class Moneybox {
public:
void rubles(pair<unsigned, unsigned>&& deposit) {
coins[deposit.first * 100] += deposit.second;
}
void copeck(pair<unsigned, unsigned>&& deposit) {
coins[deposit.first] += deposit.second;
}
private:
map<unsigned, unsigned> coins;
friend ostream& operator<<(ostream& out, const Moneybox& mb) {
for (const auto& [denomination, quantity] : mb.coins) {
if (denomination > 100) out << denomination / 100 << " руб. ";
else out << denomination << " коп. ";
out << quantity << " шт. \n";
}
return out;
}
};
pair<unsigned, unsigned> input(const char* msg) {
unsigned denomination;
cout << "\nДостоинство в " << msg << ": ";
cin >> denomination;
unsigned quantity;
cout << "Количество: ";
cin >> quantity;
return { denomination, quantity };
}
int main() {
system("chcp 1251 > nul");
Moneybox mb;
auto flag = true;
do {
cout << "Для ввода в рублях нажмите клавишу 1\n";
cout << "Для ввода в копейках нажмите клавишу 2\n";
cout << "Для выхода нажмите любую другую клавишу... ";
switch (_getch()) {
case '1': mb.rubles(input("рублях")); break;
case '2': mb.copeck(input("копейках")); break;
default: flag = false;
}
system("cls");
} while (flag);
cout << mb;
system("pause > nul");
}
Rustam Mamirov
Rustam Mamirov
73 228
Лучший ответ
>Как я понимаю правильнее всего было бы сделать это через двумерный массив
Неправильно понимаешь. Правильнее было бы сделать словарь. Добрые дяди его уже для тебя написали и тебе там совершенно не придется заниматься фигней вроде самостоятельного выделения памяти или ручного поиска существующих номиналов. Подробнее здесь: https://www.moderncplusplus.com/map/