2015-06-06 2 views
1

я карта объявлена ​​следующим образомстанд :: соиЬ для карты <string, int>

map<string, int> symbolTable; 


if(tempLine.substr(0,1) == "("){ 
      symbolTable.insert(pair<string, int>(tempLine, lineCount)); 
     } 

Как я станд :: соиЬ всех вещей в моей таблице символов?

+0

Другой способ делать Inse rt будет 'symbolTable [tempLine] = lineCount;' или 'symbolTable.insert ({tempLine, lineCount});' –

+1

_ "Как мне std :: cout все вещи" _ Я хочу, чтобы на T- Рубашка. –

ответ

2

Вот альтернатива, если ваш компилятор ISN» т C++ 11 соответствует:

for (map<string, int>::iterator it = symbolTable.begin(); 
    it != symbolTable.end(); ++it) 
{ 
    cout << it->first << " " << it->second << endl; 
} 

И для полноты картины, если она:

for (auto& s : symbolTable) 
{ 
    cout << s.first << " " << s.second << endl; 
} 
+0

Это сработало для меня, спасибо Джонатан! –

+2

лучше добавить 'const' –

4

В современном C++:

for (auto&& item : symbolTable) 
    cout << item.first << ": " << item.second << '\n'; 

Если у вас есть доступ к пре-C++ 11 компилятором только код будет:

for (map<string, int>::const_iterator it = symbolTable.begin(); it != symbolTable.end(); ++it) 
    cout << it->first << ": " << it->second << '\n'; 
+0

Спасибо! Я получаю целую кучу ошибок «error: expected unqualified-id before» && «token», не хватает ли библиотеки? –

+0

@BarneyChambers какой компилятор и версия? –

+0

Использование g ++ Я использую версию 4.4.7 –

1

Вы можете использовать цикл для печати всех пары ключ/значение. Код Ниже приведен пример в C++ 11

for (const auto& kv : symbolTable) { 
    std::cout << kv.first << " " << kv.second << '\n'; 
} 

пса: Оба два других ответов обращают мало внимания на const, что весьма печально ...

+0

Лучше использовать '' \ n'', а не '' \ n "'. Ненужные брекеты тоже меня огорчают, но каждый их собственный; –

+0

@TonyD, хороший пункт. –

Смежные вопросы