促进每个问题

时间:2010-06-07 14:27:55

标签: c++ boost boost-foreach

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&lt; _Ty1,_Ty2&gt;'到'lp_type&amp;'

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

3 个答案:

答案 0 :(得分: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){

}

答案 1 :(得分:2)

请参阅Is it possible to use boost::foreach with std::map?

看起来你需要这样做:

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

答案 2 :(得分:1)

我认为James McNellis是对的。我将添加您利用std :: map提供的value_type typedef的建议。然后你的代码看起来像这样:

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

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

}