2014-09-08 3 views
0

Я пытаюсь выяснить, как работает google sparse_hash_map. У меня есть правильная декларация и ее заполнение. Однако у меня возникают проблемы с повторением и отображением карты. Я хочу напечатать пары, чтобы проверить правильность вычислений. Моя декларация:Sparse_hash_map iteration

sparse_hash_map<int*, double **, hash<int*>, eqstr> q_table; 

Я пытаюсь сделать итерацию на цикл, как

for(sparse_hash_map<int*, double **, hash<int*>, eqstr>::iterator it = q_table.begin(); it != q_table.end(); ++it) 

Я пытался делать int* key = it[0], но не работает, ни делает int* key = it.first. Даже попробовал int* key = it.key() ... Хотя ничего подобного не содержится в документации.

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

Помощи будет оценена. Спасибо.

+0

В конце этой страницы есть пример использования итератора: http://goog-sparsehash.sourceforge.net/doc/sparse_hash_map.html – Carl

+0

@carl Большое вам спасибо. Я пропустил это. В итоге я сделал что-то вроде 'int * state = it->; double ** action_value = q_table [state]; // печатать все ... '. Не самый эффективный я предполагаю, но работает для начинающих. – inutza

ответ

0

Предполагая, что он реализует интерфейс в соответствии с стандартной библиотекой делали вы пытаетесь что-то вроде:

int * state = it->first; 
double ** action_value = it->second; 

Вы должны использовать стрелки, потому что обычно, когда вы разыменования итератора вы получаете value_type элемента контейнера, и для ассоциативных контейнеров это обычно какой-то pair с first и second пользователей.