【问题标题】:boost::assign with std::mapboost::assign 与 std::map
【发布时间】:2013-12-10 10:42:15
【问题描述】:

我尝试通过使用operator+=()boost::assignstd::map 一起使用,但我无法成功。

在我的代码下面

#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 才能使其工作?

【问题讨论】:

标签: c++ boost map stl


【解决方案1】:

您将boost.assign 的两个功能混为一谈。

它确实支持+=,但是用逗号分隔的values,而mapvalues实际上是一对key→mapped。

所以,你必须写:

dt += (make_pair("CIAO", 'C')), (make_pair("SALUT",'S'));

这主要是为什么还提供了insert 语法,以便您可以编写:

insert (dt) ("CIAO", 'C'), ("SALUT", 'S');

documentation for this stuff 还不错……

【讨论】:

  • 很明显..我没想到!非常感谢。
【解决方案2】:

我不经常使用 boost::assign 但我知道的唯一方法是将std::pair 添加到您的地图中。 因此将您的代码更改为:

dt += (pair<string,char>("CIAO", 'C')),(pair<string,char>("SALUT",'S'));

应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多