Компилятор не читает set в map
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
string s, res = "";
map<char,set<char>> m;
for (ll i = 1; i < s.size() - 1; i ++)
{
m[s[i - 1]].insert (s[i]);
m[s[i]].insert (s[i - 1]);
m[s[i]].insert (s[i + 1]);
m[s[i + 1]].insert (s[i]);
}
for (char i = 'a'; i <= 'z'; i ++)
{
res += m[i][0];}
}
}
Компилятор не читает set в map и выводит такую ошибку:
no match for operator[] (operand types are std::map<char, std::set<char> > and std::pair<const char, std::set<char> >)
Я попробовал и так:
res += m[i] -> begin();
Все равно не читает
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну нет у set обращения по индексу ([]). Так что:
res += *m[i].begin();
Сами посмотрите, что у вас:
res += m[i] -> begin();
m[i] - это тип значения map, то бишь set. Не указатель! Поэтому надо использовать точку, а не ->. Далее, вы получаете итератор, а не значение, и его надо разыменовать, чтоб добраться до значения, на которое он указывает.
P.S. Да, и уберите лишнюю фигурную скобку после res += m[i][0];} - чтоб потом еще один вопрос не писать...
P.P.S. А что вы подразумеваете под "Компилятор не читает"? Он может не читать исходный файл, но никакой set компилятор не читает.