2014-01-06 4 views
0

В качестве части моего C++ HW я должен реализовать универсальный контейнер Map.Реализация общей карты [от HW]

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

Мне предоставили 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. итератора :: GETKEY() 2. итератора :: GetData() 3. Оператор "*" возвращает строку, howerve Я не уверен, как создать строку из общих данных.

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

ответ

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, строки, что у вас есть). Также очень легко предоставить пользовательские принтеры для таких потоков для ваших собственных типов, предоставляя перегруз для оператора < < для вашего конкретного типа.

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

Смежные вопросы