促进每个问题

are*_*slp 2 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 ){

}
Run Code Online (Sandbox Code Playgroud)

这不能被遵守:错误C2440:'初始化':无法从'std :: pair <_Ty1,_Ty2>'转换为'lp_type&'

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

Jam*_*lis 10

你的typedef不正确; 它需要是:

typedef std::pair< const std::string , std::string > lp_type;
                   ^ note the added const
Run Code Online (Sandbox Code Playgroud)

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

使用value_typetypedef 会有点干净; 这样您就不会重复类型信息:

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

}
Run Code Online (Sandbox Code Playgroud)

  • 虽然技术上是正确的,但我认为使用地图的内部typedef`value_type`会更好,因为它不会暴露这种复杂性. (2认同)