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-qualifiedです。

value_typetypedefを使用する方が少しクリーンです。このようにして、タイプ情報を繰り返さないでください。

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

std::mapでboost::foreachを使用することは可能ですか?を参照してください。。

あなたがする必要があるように見えます:

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 に答える