Написати невелику программу на C++
800 UAHДля контентної статті готуємо матеріал.
Маємо завдання, для якого треба реалізувати рішення:
Реализовать шаблон класса Buyer, параметризованный типом Product, который служит идентификатором для каждого продукта. Для типа Product обещано реализовать конструктор копий (и оператор присваивания), деструктор, операторы сравнения и std::hash.
Класс Buyer должен реализовать следующие публичные методы:
* size_t products() const - возвращает количество зарегистрированных видов товаров (т.е. не количество проданных единиц),
* void sell(const Product & p, size_t amount), - в котором отражена продажа amount товаров p
* size_t rank(const Product& p) const, - который возвращает количество раз, когда самый продаваемый товар пронумерован от 1 (если несколько товаров проданы одинаково, вы можете сортировать их как угодно)
* const Product& product(size_t rank) const обратная функция к rank (т.е. пока не произойдет исключение, всегда выполняется product(rank(p)) == p a rank(product(r)) == r)
* size_t sold(size_t r) const - количество проданных единиц r-го самого продаваемого продукта
* size_t sold(size_t from, size_t to) const - аналогична однопараметрической версии, но возвращает сумму проданных единиц за интервал от и до (включая оба края; таким образом sold(r, r) == sold(r) a sold(1, products()) это общее количество проданных единиц по всем видам товаров; ввод to < from считается недействительным.
* size_t first_same(size_t r) const a size_t last_same(size_t r) возвращают наименьший (соответственно наибольший) rank r', для которого sold(r') == sold(r)
* Если аргументы вызова недопустимы (т.е. rank выходит за пределы или неизвестно произведение в методе rank ), вызвать исключение std::out_of_range.