Завершено
3
21.03.2025, 03:17
15.05.2025, 09:06
Реализовать класс Map.
Ассоциативный контейнер <строка, число> на базе простого динамического массива или списка.
Предназначен для небольшого количества элементов, предоставляет линейный поиск.
Реализовать класс Map содержащий целые (int) числа, доступ к которым осуществляется по строке.
public и protected методы классов фиксированы, кроме спецификаторов. 
Т.е. нельзя менять названия методов, а также типы и количество аргументов.
НО в этих методах отсутствуют спецификаторы const и static, которые были удалены намеренно. Их необходимо вернуть на место.
private поля и private методы можно добавлять в класс Map. 
//Map.hpp
const size_t max_key_length = 256;
struct Pair {
    const char key[max_key_length]{};
    int value{};
};
class Map {
public:
    Map();
    ~Map();
    Map(const Map&);
    Map& operator=(const Map&);
    size_t size();
    int& insert(const char* key);
    Pair* at(size_t index);
    Pair* find(const char* key);
    void erase(const char* key);
    const int& operator[](const char* key);
    int& operator[](const char* key);
protected:
};
struct Pair -- элемент, содержащий в себе ключ и значение.
Map() -- Конструктор по умолчанию, задаёт длину буфера по умолчанию.
~Map() -- деструктор.  
Map(const Map& val) -- копирующий конструктор. 
Map& operator=(const Map&) -- оператор присваивания.
size_t size() -- Возвращает количество элементов.
int& insert(const char* key); -- Вставить элемент с заданным ключём и вернуть ссылку на значение. 
Если элемент с таким ключём существует, то вернуть ссылку на существующее значение.
Pair* at(size_t index); -- Вернуть указатель на элемент с индексом index. Если index >= size() вернуть nullptr.
Pair* find(const char* key); -- Найти элемент с заданным ключём key. Если элемента с таким ключём нет, вернуть nullptr.
void erase(const char* key); -- Удалить элемент с заданным ключём key. 
int& operator[](const char* key); -- Индексатор. Вставить элемент с заданным ключём и вернуть ссылку на значение. 
Если элемент с таким ключём существует, то вернуть ссылку на существующее значение.
const int& operator[](const char* key); -- Константный индексатор (только для чтения).
Если элемент с таким ключём существует, то вернуть константную ссылку на существующее значение, иначе генерировать исключение std::out_of_range("Key not found");.