2017-01-19 2 views
0

Я хотел бы знать, можно ли вставить два или более элемента в bimap в качестве ключа. У меня есть минимальный пример bimap с одним элементом ключаКак сделать два или более элемента в бимапе как ключ

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

int main() 
{ 
    typedef boost::bimap<boost::bimaps::set_of<int>,boost::bimaps::multiset_of<int> > bimap; 
    bimap numbers; 

    numbers.insert({1, 1}); 
    numbers.insert({2, 1}); 
    numbers.insert({3, 8}); 
    auto it = numbers.left.find(1); 


    std::cout << it->first << ":" << it->second << std::endl; 
} 

Теперь я могу что-то вроде

typedef boost::bimap<boost::bimaps::set_of<int>,boost::bimaps::multiset_of<int, int > > bimap; 
bimap numbers; 
numbers.insert({1, 1, 5}); 
numbers.insert({2, 1, 1}); 
+0

Извините, я чувствую себя немым, но что вы подразумеваете под «двумя элементами»? Разве вы не нагло вставляете * три * элемента в карту? –

+0

@KerrekSB Oh !! извините, если я не положил это хорошо. Я имею в виду http://stackoverflow.com/questions/41675259/unordered-map-to-have-three-elements – AwaitedOne

+2

Нет, подождите, пожалуйста, сделайте свой вопрос самодостаточным. Я не хочу идти на дикую гусиную погоню за смыслом. Я уже делаю это в своей повседневной работе. –

ответ

1

Пара Интс имеет тип std::pair<int, int> (также std::tuple<int, int> в C++ 11 и более поздних версий)

typedef boost::bimap<boost::bimaps::set_of<int>,boost::bimaps::multiset_of<std::pair<int, int > > > bimap; 
bimap numbers; 
numbers.insert({1, {1, 5}}); 
numbers.insert({2, {1, 1}}); 

Обратите внимание на дополнительные {} во вставках

+0

Спасибо за ваш ответ. Я могу искать что угодно, используя итератор, но как я могу получить ключ и его значение, используя 'at (1) или at (2)' – AwaitedOne

+0

'key' и' value' с какой стороны бимапа? вы можете искать, например. 'numbers.right.find ({1, 1});' получить 2 – Caleth

+0

не хотят искать. Я знаю, что мой ключ есть, и я хочу найти что-то слева, например 'numbers.left.at (1)' или справа – AwaitedOne