Найти все ключи повторяющегося элемента в bimap

Я хочу получить доступ ко всем ключам повторяющегося элемента в bimap, У меня есть пример кода ниже

#include <string>
#include <iostream>
#include <utility>
#include <boost/bimap.hpp>
#include <boost/bimap/set_of.hpp>
#include <boost/bimap/multiset_of.hpp>

namespace bimaps = boost::bimaps;
typedef boost::bimap<bimaps::set_of<unsigned long int>,
bimaps::multiset_of<unsigned long int > > bimap_reference;
typedef bimap_reference::value_type position;
bimap_reference numbers;

int main()
{
numbers.insert(position(123456, 100000));
numbers.insert(position(234567, 80000));
numbers.insert(position(345678, 100000));
numbers.insert(position(456789, 80000));auto it = numbers.right.find(100000);
std::cout<<"numbers:"<<it->first<<"<->"<<it->second<<std::endl;
return 0;
}

В приведенном выше коде я повторил элементы на правой стороне. Приведенный выше код дает мне первый ключ элемента 100000я 123456 <--> 100000, Но у меня есть еще одна запись элемента 100000, как получить доступ ко всем ключам повторяющегося элемента (элемент может присутствовать несколько раз с уникальным ключом на левой стороне).

0

Решение

использование мультимножеством :: equal_range на правой стороне.

Таким образом, вы получаете диапазон итераторов от первого вхождения до последнего, который вам нужно затем итерировать.

using ritr = bimap_reference::right_const_iterator;

std::pair<ritr, ritr> range = numbers.right.equal_range(100000);

for (auto itr = range.first; itr != range.second; ++itr)
{
...
}

Редактировать:

using ritr заявление делает ritr псевдоним для фактического типа. Это эквивалентно typedef который вы используете выше.

Псевдоним просто облегчает чтение следующей строки, чем если бы я дважды набрал фактическое имя типа в объявлении std :: pair.

Еще более простым решением будет использование авто.

equal_range является функцией-членом мультимножества, которое находится справа от двунаправленного изображения. Он возвращает std :: pair, который содержит начальный и конечный итераторы элементов в мультимножестве, которые равны указанному ключу, для итерации обычным способом.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector