Лог:
c:\mingw\lib\gcc\mingw32\5.3.0\include\c++\bits\stl_tree.h: In instantiation of 'void std::_Rb_tree::_M_insert_unique(_II, _II) [with _InputIterator = std::__cxx11::basic_string; _Key = std::__cxx11::basic_string; _Val = std::pair, std::__cxx11::basic_string >; _KeyOfValue = std::_Select1st, std::__cxx11::basic_string > >; _Compare = std::less >; _Alloc = std::allocator, std::__cxx11::basic_string > >]':
Код:
#include <iostream>
#include <string>
#include <iterator>
#include <map>
using namespace std;
int main()
{
int n;
cin >> n;
map <string, string> human;
string keyword, login, password, sLoggedIn;
for (int i = 0; i < n; i++)
{
cin >> keyword >> login >> password;
if (keyword == "register")
{
for (auto iter = human.begin(); iter != human.end(); ++iter)
{
if (iter->first != login)
{
human.insert(login, password);
cout << "success: new user added";
}
else
{
cout << "fail: user already exists";
}
}
}
if (keyword == "login")
{
for (auto iter = human.begin(); iter != human.end(); ++iter)
{
if (iter->first == login)
{
if (password == iter ->second)
{
if (sLoggedIn == login)
cout << "fail: already logged in";
else
cout << "success: user logged in";
sLoggedIn = login;
}
else
{
cout << "fail: incorrect password";
}
}
else
{
cout << "fail: no such user";
}
}
}
if (keyword == "logout")
{
for (auto iter = human.begin(); iter != human.end(); ++iter)
{
if (iter->first == login)
{
if (sLoggedIn == login)
{
cout << "success: user logged out";
sLoggedIn = " ";
}
else
{
cout << "fail: already logged out";
}
}
else
{
cout << "fail: no such user";
}
}
}
}
}
human.insert(login, password);
замените на
human[login] = password;
Или, если уж позарез нужен insert
, то на
human.insert(make_pair(login, password));
См. описание map::insert
: http://en.cppreference.com/w/cpp/container/map/insert
Логика вашего кода бессмысленна чуть менее чем полностью. Зачем вы выполняете цикл по каждому элементу human
и пытаетесь создавать новую запись после проверки каждого отдельного элемента? Если вам нужно проверять, существует ли уже такой пользователь, то std::map
для того и создан, чтобы вам не нужно было выписывать подобных циклов вообще.
Что касается синтаксиса добавления элемента в human
, то именно в вашем синтаксисе правильной функцией является emplace
, а не insert
human.emplace(login, password);
Обратите внимание, что если в вашем варианте кода вместо insert
или emplace
вы используете синтаксис
human[login] = password;
то в общем случае пароль пользователя будет переписываться всегда, независимо от того, были ли это новый пользователь или уже существующий.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Установил Code::Blocks 1601; запускаю любой проект- выдает ошибку!Выскакивают следующие окна: после нажатия собрать и запустить
Дошел до темы исключения в С++Такой вопрос, как задать исключение деление на 0? Если инструкция не работает
В общем, мне надо сделать программу с длинной арифметикойПроблема появилась на этапе считывания и переворота массива
Дан ориентированный граф, нужно проверить есть ли в нем циклВершин до 10^5, поэтому дфс с рекурсией не зайдет