Я пытаюсь получить значение, доступное по его ключу. У меня есть минимальный пример, который я пробовал до сих пор, и отлично работает только для доступа с левой стороны.Значение доступа с ключом в 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<std::pair<unsigned long int, unsigned long int> > > bimap_reference;
typedef bimap_reference::value_type position;
bimap_reference numbers;
int main()
{
numbers.insert(position(123456, std::make_pair(100000,50000)));
numbers.insert(position(234567, std::make_pair(200000,80000)));
numbers.insert(position(345678, std::make_pair(300000,10000)));
numbers.insert(position(456789 ,std::make_pair(100000,60000)));
auto it = numbers.left.at(123456);
std::cout<<"numbers:"<<it.first<<"<->"<<it.second<<std::endl;
return 0;
}
И когда я пытался смотреть с правой стороны с помощью парного ключа для доступа к значению, и, как след я попробовал следующее.
auto itt = numbers.right.at({100000,50000});
auto itt = numbers.right.at(std::make_pair(100000,50000));
std::cout<<"from right: "<<itt.first<<std::endl;
> error: ‘boost::bimaps::bimap, boost::bimaps::multiset_of > >::right_map {aka class boost::bimaps::views::multimap_view, boost::bimaps::multiset_of >, mpl_::na, mpl_::na, mpl_::na> >}’ has no member named ‘at’ auto itt = numbers.right.at({100000,50000});
Вышеуказанные линии не работают. Я также хотел бы знать, если это возможно, чтобы получить доступ, используя только один элемент парного ключа что-то вроде
auto itt = numbers.right.at({50000});
Спасибо за ваш ответ. На самом деле я хотел использовать '.at()' для быстрого доступа. Использование. 'find() 'может быть не таким быстрым, потому что' bimap' слишком велико. И если я не могу выполнить поиск с половинным параметром, он удваивает работу, потому что моя работа выполняется с половинным поиском. Не могли бы вы предложить структуры данных, которые имеют такой тип функциональности, действительно быстро. – AwaitedOne
Добавлен более подробный ответ. Мои два цента: если вы хотите пойти с 'multiset_of', используйте' find', если вы не можете продемонстрировать, что производительность плохо для вас. При этом вы не можете использовать 'at' с' multiset_of', у него нет этой функции-члена. Это не вопрос предпочтений. – skypjack