将std::map复制/插入到boost::bimap中

Copying/Inserting a std::map into a boost::bimap

本文关键字:boost bimap 插入 std map 复制      更新时间:2023-10-16

我尝试将std::map的元素复制到boost::bimap中。我无法让std::copy工作(boost文档似乎表明bimap应该与std::copy兼容)。

我尝试了以下方法:

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 !

错误消息很长,以开头

1>C:Program Files (x86)Microsoft Visual Studio 8VCincludexutility(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 8VCincludeiterator(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>        ]

bimap本身与map的签名不兼容,但左视图是。尝试插入m_curves.left:

m_curves.left.insert(curves.begin(), curves.end());