Компилятор не читает 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 компилятор не читает.

→ Ссылка