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> ]
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());