unordered_map<char, int> charMap;
charMap[c]++;
std :: map :: operator [] :
Возвращает ссылку на значение, сопоставленное ключу, эквивалентному ключу, выполняя вставку если такой ключ еще не существует.
Итак, charMap[c]
возвращает ссылку на сопоставленный int
, который увеличивается с ++
.
auto it = myMap.insert({s[i], 1});
Нет соответствия insert
перегрузка. Попробуйте использовать emplace
:
auto it = myMap.emplace(s[i], 1);
Редактировать: я только что заметил, что вы изменили на map
с string
в качестве ключа во второй части кода и что вы, вероятно, пытаетесь создать string
из char
s[i]
с длиной 1
, когда вы делаете {s[i],1}
, но это не так. Сначала идет счет, затем char
- ему также не хватает значения .
При использовании insert
это может выглядеть так, как показано ниже. Я использую структурированные привязки, чтобы было легче увидеть, что к чему.
map<string,int> myMap;
for(size_t i=0; i<s.length(); i++){
// create a string of length 1 mapped to the value 1
auto [it, inserted] = myMap.insert({{1, s[i]}, 1});
auto& [key, value] = *it;
if(inserted == false) {
++value;
}
}