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