Цикл по equle_range в повышении :: unordered_multimap

Я пытаюсь узнать, как перебирать значения, возвращаемые boost :: unordered_multimap, которые имеют одинаковые ключи. Итак, я сделал это,

boost::unordered_multimap<string, string> sample;

В котором я, может быть,

<"one", "1">,

<"one", "11">,

<"two", "2">,

<"three", "3">,

<"three", "3">,

<"three", "33">,

<"three", "333">,

и я пытаюсь получить значения, соответствующие «два», поэтому я сделал это,

std::pair<boost::unordered_multimap<string, string>::iterator, boost::unordered_multimap<string, string>::iterator> > ret = sample.equal_range("two");

и я повторяю это как,

for(boost::unordered_multimap<string, string>::iterator> it = ret.first ; it != ret.second; it++)
{
cout<<"The values mapped are : "<<*it->second<<"\n";
}

Получу ли я значение: 2, так как это единственное значение, которое отображается? Буду ли я выйти из цикла в первый раз? Я пытаюсь получить ответ онлайн / на форсированной документации, но мне это не удалось. Это может быть основной вопрос, но я пытаюсь учиться. Любая помощь будет оценена.

ТИА

0

Решение

Около boost: equal_range (ключ& vkey):

Использование:

std::pair<iterator, iterator> Equal_Range = Unordered_Map.equal_range("key");

Вернуть:

Таблица карт содержит все сопоставленные результаты KEY: key, Equal_Range.first представляет первое местоположение в таблице результатов, в то время как Equal_Range.second представляет последний. Особый случай: Если только один элемент соответствует, ret.first указать на местоположение, отображаемое key, а также ret.second указать последнее местоположение на исходной карте: original_map.last,

Итак, используя equal_range(key& vkey)вы уже получили таблицу результатов std::pair<itr1, itr2>, в котором хранятся все сопоставленные результаты, которые вы нашли, и itr1 это первое местоположение, отображаемое vkey в то время как itr2 представляет последний. Итак, ваш код работает нормально:

for(auto Itr = ret.first; Itr != ret.second; ++Itr)
std::cout << "The values mapped are : " << Itr->second << std::endl;

Прецедент: key знак равно "three"

The values mapped are : 3
The values mapped are : 3
The values mapped are : 33
The values mapped are : 333
0

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

Других решений пока нет …

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