Отображение объектов пользовательского шаблонного абстрактного типа данных

Я разрабатываю абстрактный тип данных, который похож на карту STL для назначения. В записке говорится, что я должен предоставить ряд возможностей, включая вывод объектов, содержащихся в абстрактном типе данных. Как мне поступить с выводом данных массива, хранящихся в ADT, я не могу использовать любой STL, поэтому я предполагаю, что не могу использовать итераторы, и иметь функцию, которая использует cout в ADT, кажется глупым. Какие-либо предложения? Благодарю. Код ниже:

template <typename K, typename D>
class Map
{
private:
int mapSize;
int dataFilled;
struct keyData
{
K key;
D data;
};

keyData* datas;
keyData* ptr;

0

Решение

Если вы идете путем предоставления пользователю доступа к объектам, то я бы пошел с итераторами и operator[], Чтобы определить итераторы, вам просто нужно определить begin а также end функция-член (с возможным const Перегрузки). Проблема в том, что вы обычно хотите предложить как ключи, так и значения карты. Путь std::map решает это, возвращая некоторый тип, который семантически эквивалентен указателю на std::pair<const Key, T> так что вы можете получить доступ к ключу через std::get<0>(*it) и значение по std::get<1>(*it),

Если вы хотите определить пользовательскую функцию «печати», вы можете просто определить operator<< за std::ostream:

template<class Key, class Value>
std::ostream& operator<<(std::ostream& os, const Map<Key, Value>&) { ... }

Таким образом, вы сможете использовать:

Map<Key, Value> map;
std::cout << map;

Я бы рекомендовал предоставить аналогичным образом operator>> за std::istream,

Для большего вдохновения вы можете взять посмотри на std::map интерфейс.

0

Другие решения


По вопросам рекламы [email protected]