boost :: assign with std :: map

时间:2013-12-10 10:42:16

标签: c++ boost map stl

我尝试使用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才能使其正常工作?

2 个答案:

答案 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非常好......