4

I tried copying the elements of a std::map into a boost::bimap. I cannot get std::copy to work (the boost documentation seems to indicate that bimap should be compatible with std::copy).

I tried the following:

std::map<K, T> curves;

boost::bimap<boost::bimaps::set_of<K>,
    boost::bimaps::multiset_of<T>> m_curves;

... // some initialisation of curves

std::copy(curves.begin(), curves.end(), std::inserter(m_curves, 
    m_curves.end())); // This fails

m_curves.insert(curves.begin(), curves.end()); // This fails too !

The error message is quite long and starts with:

1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xutility(2266) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const std::pair<_Ty1,_Ty2>' (or there is no acceptable conversion)
1>        with
1>        [
1>            _Ty1=const K,
1>            _Ty2=std::string
1>        ]
1>        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\iterator(129): could be 'std::insert_iterator<_Container> &std::insert_iterator<_Container>::operator =(const boost::bimaps::relation::mutant_relation<TA,TB,Info,force_mutable> &)'
1>        with
1>        [
1>            _Container=Focus::BMpCrvKeyToName,
1>            TA=boost::bimaps::tags::tagged<const K,boost::bimaps::relation::member_at::left>,
1>            TB=boost::bimaps::tags::tagged<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,boost::bimaps::relation::member_at::right>,
1>            Info=boost::bimaps::detail::manage_additional_parameters<boost::mpl::na,boost::mpl::na,boost::mpl::na>::case_NNN::additional_info,
1>            force_mutable=false
1>        ]
0

1 Answer 1

6

A bimap itself isn't signature-compatible with map, but the left view is. Try inserting into m_curves.left:

m_curves.left.insert(curves.begin(), curves.end());
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.