Задание № 3190

Студент

Байнова Валерия

Задача

Простой ассоциативный массив

Состояние

Открыто

Дедлайн
29 марта 2021
Назначено

21.03.2021, 07:52

Реализовать класс 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");.

Требования

  1. public и protected методы классов фиксированы. Т.е. нельзя менять названия методов, а также типы и количество аргументов.
  2. Названия header и source файлов следующие: Map.hpp, Map.cpp.
  3. Написать unit test'ы для реализованных классов.

Действия