回答:
これは次のように実現できます。
map<string, int>::iterator it;
for ( it = symbolTable.begin(); it != symbolTable.end(); it++ )
{
std::cout << it->first // string (key)
<< ':'
<< it->second // string's value
<< std::endl ;
}
C ++ 11 (以降)、
for (auto const& x : symbolTable)
{
std::cout << x.first // string (key)
<< ':'
<< x.second // string's value
<< std::endl ;
}
C ++ 17 (以降)、
for( auto const& [key, val] : symbolTable )
{
std::cout << key // string (key)
<< ':'
<< val // string's value
<< std::endl ;
}
auto const& [key, val] : symbolTable
フォーマットを探していました!
以下をお試しください
for ( const auto &p : table )
{
std::cout << p.first << '\t' << p.second << std::endl;
}
同じことは通常のforループを使って書くことができます
for ( auto it = table.begin(); it != table.end(); ++it )
{
std::cout << it->first << '\t' << it->second << std::endl;
}
value_type std::map
が次のように定義されていることを考慮してください
typedef pair<const Key, T> value_type
したがって、私の例では、pはvalue_typeへのconst参照で、Keyは std::string
T、Tはint
また、関数が次のように宣言されている場合、それはより良いでしょう。
void output( const map<string, int> &table );
のvalue_type
a map
は、それぞれpair
キーと値を含むa first
とsecond
メンバーです。
map<string, int>::iterator it;
for (it = symbolTable.begin(); it != symbolTable.end(); it++)
{
std::cout << it->first << ' ' << it->second << '\n';
}
または、C ++ 11の場合、範囲ベースを使用して:
for (auto const& p : symbolTable)
{
std::cout << p.first << ' ' << p.second << '\n';
}
モスクワの@Vladが言うように、value_type
for std::map
は次のように定義されていることを考慮に入れてください。
typedef pair<const Key, T> value_type
つまり、キーワードauto
をより明示的な型指定子に置き換えたい場合は、これを行うことができます。
for ( const pair<const string, int> &p : table ) {
std::cout << p.first << '\t' << p.second << std::endl;
}
auto
この場合に何が変換されるかを理解するためだけに。