Завершено
3
21.03.2024, 10:46
28.05.2024, 05:47
Реализовать класс 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");.