Лог:
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;
то в общем случае пароль пользователя будет переписываться всегда, независимо от того, были ли это новый пользователь или уже существующий.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости