2014-01-14 7 views
0

Я пытаюсь получить доступ к стоимости и ключ с использованием * итератора, как показано ниже:реализация контейнера карты с геттер итератора

for (Map<K, V>::iterator it = map.begin(); it != map.end(); ++it) { 
V& value = (*it).getValue(); // or*it.getValue(); 
} 

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

Node<K, V>& node = *it; 
V& value = node.getValue(); 

У меня есть и сопзИ и ни константные Геттеры, также в * обратном операторе ссылка на узел.

Редактировать:
Я реализую свой собственный код карты.

редактировать 2 Я понял это, мой оператор * возвращал указатель и я думал, что это возвращает &. спасибо всем

+0

Какая ошибка у вас возникла? BTW - это параметры шаблона K и V? – juanchopanza

+0

Похоже, вы не используете 'std :: map', а какой-то другой контейнер. Вам нужно будет опубликовать код, чтобы показать, как выглядит итератор контейнера. – Sean

+0

Что такое «Карта»? Это псевдоним для 'std :: map', или что-то нестандартное? –

ответ

0

Если тип карта std::map, или нечто подобное, что соответствует стандартному интерфейсу ассоциативный контейнер, то он содержит пары ключ-значение, типа std::pair<const K, V>, и это то, что вы получаете, когда вы разыменования итератора ,

Чтобы получить доступ к значению, вам нужен второй элемент пары:

V & value = it->second; 

Если тип карты не соответствует стандартному интерфейсу, то вам нужно посмотреть на его документации; Я не могу догадаться, как это может сработать.

+0

его собственной карты, спасибо за усилие – Emad

+0

@ Emad4U: В этом случае было бы неплохо разместить точное сообщение об ошибке и (минимальные) определения 'iterator' и' Node', показывающий объявления 'operator *' и 'getValue'. Невозможно догадаться, что может быть неправильно с вашим собственным кодом, если мы не сможем его увидеть. –

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