2
std::map< std::string , std::string > matrix_int;
typedef std::pair< std::string , std::string > lp_type;
BOOST_FOREACH( lp_type &row, matrix_int ){

}

这无法遵守:错误 C2440:“正在初始化”:无法从“std::pair<_Ty1,_Ty2>”转换为“lp_type &”

当我在元素类型中有','时,boost doc说我可以使用typedef或预定义一个var;但是当我想获得参考时该怎么办?

4

3 回答 3

10

您的 typedef 不正确;它必须是:

typedef std::pair< const std::string , std::string > lp_type;
                   ^ note the added const

映射对中的关键元素是 const 限定的。

value_type使用typedef会更干净一些;这样你就不会重复类型信息:

typedef std::map<std::string, std::string> map_t;
map_t matrix_int;
BOOST_FOREACH(map_t::value_type& row, matrix_int){

}
于 2010-06-07T14:32:30.510 回答
2

请参阅是否可以将 boost::foreach 与 std::map 一起使用?.

看起来你需要这样做:

typedef std::map< std::string, std::string > MyMap;
BOOST_FOREACH( MyMap::value_type& row, matrix_int ) {
}
于 2010-06-07T14:32:52.280 回答
1

我认为詹姆斯麦克内利斯是对的。我将添加您利用value_typestd::map 提供的 typedef 的建议。然后您的代码可能如下所示:

typedef std::map< std::string , std::string > MyMap;
MyMap matrix_int;

BOOST_FOREACH( MyMap::value_type &row, matrix_int ){

}
于 2010-06-07T14:36:22.743 回答