Реализация общей карты [из HW]

0

В рамках моей C++ HW я должен реализовать общий контейнер Map.

Карта, которую я должен реализовать, должна иметь итератор и константу_тератора. Я решил хранить данные на карте в узле [как в связанном списке].

Мне была предоставлена map_example.cpp, и моя задача - написать map.h, чтобы map_example скомпилировался.

Мой вопрос касается следующих строк кода в файле map_example.cpp

Map<std::string,int> msi;
msi.insert("Alice",5);
msi.insert("Bob",8);
msi.insert("Charlie",0);

// print map
for(Map<std::string,int>::const_iterator it = msi.begin(); it != msi.end(); ++it) 
{
    std::cout << *it << std::endl;
    /*
    * prints:
    * Alice:5
    * Bob:11
    * Charlie:0
    */
}

Из этого кода я понимаю, что мне приходится перегружать оператор "*", но я не уверен, что вернуть, чтобы этот цикл мог печатать содержимое карты.

Одна из моих идей - реализовать что-то вроде: 1. iterator :: getKey() 2. iterator :: getData() 3. operator "*" вернет строку, howerve Я не уверен, как создать строку из общего данные.

Каков наилучший способ реализации карты tu для поддержки таких функций?

Теги:

2 ответа

1
Лучший ответ

Просто сделайте что-то похожее на то, что std::map<K, V> делает, который возвращает std::pair<K const, V>& или std::pair<K const, V> const& зависит от того, используется ли iterator или const_iterator. Однако std::pair<T0, T1> не имеет оператора вывода, тогда как тип, который вам нужно вернуть, должен иметь выходной итератор вывода.

0

Конкретный вопрос, похоже, заключается в том, как вы можете генерировать строку из переменной с общим типом. Это один из возможных ответов; есть еще много.

Вы работали с потоками раньше (cin и cout, например, являются потоками). Возможно, вы заметили, что можете использовать в них различные типы, используя оператор << (ints, strings, what have you). Также очень легко предоставить пользовательские принтеры для таких потоков для ваших собственных типов, предоставляя перегрузку для оператора << для вашего конкретного типа.

Вы можете потребовать, чтобы общие типы для вашей карты должны поддерживать вставку потока через оператор <<. При этом вы можете использовать правильный поток для создания строки (подсказка: в стандартной библиотеке есть такой поток).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню