Я использую boost 1.56 и имею unordered_map. Когда я вставить ключевое значение, равное нулю следующим образом:boost unordered_map значение ключа 0
boost::unordered_map<int, int> map;
for(int i=0; i < size; i++)
{
int value = another_array[j];
map.insert(i, value);
}
Я получаю сбой при обращении к карте, используя map.at (0);
Я проверил, что вставка работает, посмотрев на станде :: pairiterator, BOOL>
, возвращаемые вставки и Ий правда, указывая, что он был успешно вставлен Я создаю локальный к глобальной карте нумерации, поэтому моими ключами все 0: N-1. Я знаю, N и поэтому должны иметь возможность перебора (кол == 0: N-1) следующим образом:
for(int j=0; j < count; j++)
{
if(map.count(j))
printf("Value at index %d is %d\n", j, map.at(j));
}
, но отсчет к нулю. Если я не выполняю проверку, я получаю ошибку за пределами границ. Как это может произойти? Если я переключусь на использование 1-N в качестве ключей, такой проблемы нет.
Я понимаю, что в этом примере карта слегка переборщила, но у меня есть причины.
Обратите внимание, что я не могу использовать std :: unordered map, поскольку мы являемся кросс-платформой, и наш компилятор linux в настоящее время не поддерживает его.
Вы пробовали 'для (авто и запись: карта) станд :: соиЬ << e.first << " "<< e.second <<" \ п";'? – sehe
Re: EDIT, пожалуйста, сделайте самоназванный пример, который показывает ошибку для вас. – sehe
ну, не совсем так, как я не могу использовать C++ 11, но я попытался использовать boost :: unordered_map :: iterator, который я typedef как ii_iter, и это: 'for (ii_iter i = map.begin (); i! = map.end(); i ++) printf ("ключ:% d value% d \ n", i-> first(), i-> second) 'и не печатает 0 (I нуждался в описанном выше испытании), а также отваливается от конца карты –
mike