c++boostmultimapbimap

Boost::Bimap equivalent of bidirectional multimap


First part of the question is that I am trying to use boost::bimap, but from the documentation it is unclear to me how to define a bidirectional multimap.

The second part of the question is that I need it to be a map in one direction and a multimap in the other direction, can this be done using boost::bimap ?

Has anyone experience of this or can point me to the correct page ?


Solution

  • All is in documentation... http://www.boost.org/doc/libs/1_51_0/libs/bimap/doc/html/boost_bimap/the_tutorial/discovering_the_bimap_framework.html

    typedef boost::bimap<bimaps::multiset_of<int>, bimaps::set_of<int>> bimap_t;
    

    Example.

    #include <iostream>
    #include <boost/bimap.hpp>
    #include <boost/bimap/set_of.hpp>
    #include <boost/bimap/multiset_of.hpp>
    
    namespace bimaps = boost::bimaps;
    
    int main()
    {
       typedef boost::bimap<bimaps::multiset_of<int>, bimaps::set_of<int>> bimap_t;
       typedef bimap_t::value_type value_type;
       bimap_t bimap;
       bimap.insert(value_type(1, 1));
       bimap.insert(value_type(1, 2));
       auto& left = bimap.left;
       auto it = left.find(1);
       std::cout << "LEFT" << std::endl;
       for (; it != left.end(); ++it)
       {
          std::cout << it->first <<  " " << it->second << std::endl;
       }
       auto& right = bimap.right;
       auto r_it = right.find(2);
       std::cout << "RIGHT" << std::endl;
       for (; r_it != right.end(); ++r_it)
       {
          std::cout << r_it->first << " " << r_it->second << std::endl;
       }
    }