У меня проблема при попытке распечатать пары int и строк на карте STL:
Это код, который я использую:
#include <iostream>
#include <utility>
#include <map>
using namespace std;
typedef map<int,string> intID;
int main(){
intID ID;
ID.insert(pair<int,string>(123,"studentname1"));
ID.insert(pair<int,string>(124,"studentname2"));
ID.insert(pair<int,string>(122,"studentname3"));
intID::iterator IDIter;
for(IDIter = ID.begin();IDIter != ID.end();++IDIter){
cout <<"ID: " << IDIter->first <<", Name: " << IDIter->second << endl;
}
}
Ошибка возникает в части ", Name: " << IDIter->second
, <<
подчеркивается, говоря, что "ни один оператор не соответствует этим операндам"
Ошибка компиляции:
Ошибка 1 ошибка C2679: двоичный '<<': не найден оператор, который принимает правый операнд типа 'std :: string' (или нет приемлемого преобразования)
Я пытаюсь распечатать второго члена пары (имя студента). Я новичок в сопоставлении STL, поэтому я не уверен, что я делаю не так, что мне нужно изменить?
1 ответ
Вам необходимо включить заголовок <string>
. Вы смогли использовать тип std::string
только путем случайного включения из других заголовков. На это нельзя полагаться. Включение <string>
также приведет к перегрузкам operator<<
, которые позволят вам выводить строки.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
<ostream>
, поскольку<iostream>
определяет толькоstd::cout
, но не его члены. Однако вам часто это сходит с рук, когда реализация услужливо включает<ostream>
в<iostream>
std::string
дляoperator<<
находится не в библиотеке ввода-вывода, а в библиотеке строк.<< std::endl
).