我尝试使用boost::assign
std::map
使用operator+=()
,但我无法使其正常运行。
在我的代码下面
#include <boost/assign/std/map.hpp>
#include <boost/assign/list_inserter.hpp>
using namespace boost::assign;
typedef map<string,char> Data;
Data dt;
dt += ("CIAO", 'C'),("SALUT",'S');
我有以下错误
/usr/local/include/boost/assign/list_inserter.hpp|113| error:
no matching function for call to ‘std::map<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, char,
std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, char> > >::insert(char&)’
我在这里遗漏了什么吗?我是否必须为此容器定义std::less
才能使其正常工作?
答案 0 :(得分:2)
我不经常使用boost :: assign,但我唯一知道的方法是将std::pair
添加到地图中。
所以将代码更改为:
dt += (pair<string,char>("CIAO", 'C')),(pair<string,char>("SALUT",'S'));
应该这样做。
答案 1 :(得分:2)
您正在混淆boost.assign
的两个功能。
支持+=
,但使用逗号分隔的值,而地图值实际上是密钥→映射对。
所以,你必须写:
dt += (make_pair("CIAO", 'C')), (make_pair("SALUT",'S'));
这主要是为什么还提供了insert
语法,因此您可以编写:
insert (dt) ("CIAO", 'C'), ("SALUT", 'S');
documentation for this stuff非常好......