답변:
다음과 같이 이것을 달성 할 수 있습니다 :
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는 key_ std::string
, T는 value_type에 대한 const 참조int
또한 함수가 다음과 같이 선언되면 더 좋습니다.
void output( const map<string, int> &table );
value_type
(A)의은 map
A가 pair
그것의 키와 값을 포함 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
을 고려하십시오 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
이 경우에 무엇 을 번역 할지 이해하기 위해 .