4

我尝试将 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 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>        ]
4

1 回答 1

6

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

m_curves.left.insert(curves.begin(), curves.end());
于 2012-08-29T13:01:56.617 回答