Я пытаюсь узнать, как перебирать значения, возвращаемые 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, так как это единственное значение, которое отображается? Буду ли я выйти из цикла в первый раз? Я пытаюсь получить ответ онлайн / на форсированной документации, но мне это не удалось. Это может быть основной вопрос, но я пытаюсь учиться. Любая помощь будет оценена.
ТИА
-р
Около 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
Других решений пока нет …