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; 但是当我想要参考时我该怎么办?
答案 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 ){
}