2013-12-10 4 views
0

operator+=()을 사용하여 std::map으로 boost::assign을 사용하려고 시도했지만 작동하지 못했습니다. 내 코드boost :: assign with std :: 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을 정의해야합니까?

+1

http://www.boost.org/doc/libs/1_55_0/libs/assign/doc/index.html#intro – chris

답변

2

boost.assign의 두 가지 기능이 서로 섞여 있습니다.

그것은 지원 +=을 수행하지만 쉼표로 구분 된 와, 그리고 이 매핑 된 키 →의 사실 쌍에 매핑합니다. 당신이 쓸 수 있도록 insert 구문도 제공 이유

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

이 우세 :

그래서, 당신은 작성해야 할 것

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

documentation for this stuff 꽤 좋은 중 & hellip입니다;

+0

분명히 .. 나는 그것에 대해 생각하지 않았습니다! 고마워. –

2

나는 자주 boost :: assign을 사용하지 않지만 알고있는 유일한 길은 std::pair을 맵에 추가하는 것입니다. 코드를 다음과 같이 변경하십시오.

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

트릭을해야합니다.

관련 문제