Я создаю карту для сравнения и вижу, уникальны ли все буквы слова или нет. Когда я создаю эту карту, я сохраняю значение 1 для соответствующего символа. Проблема в том, что когда я печатаю значения карты из символов, я получаю нули только для всех значений.Как изменить значение целого целого по умолчанию на карте?
При попытке исследовать это кто-то сказал мне, что это связано с тем, что все значения карты по умолчанию равны нулю, и мое целое число должно быть инициализировано для его изменения. Я не совсем понимаю, что они подразумевают под целым значением, которое нужно инициализировать, потому что я должен иметь возможность передать значение буквального целого, не так ли?
Ниже приведен код, который я в настоящее время, как вы видите, я пытаюсь передать в 1 для героев слова и мои чеки кода, чтобы увидеть, если символ уже существует на карте:
#include <iostream>
#include <map>
using namespace std;
bool unique(char const* word)
{
map<char,int> cmpr;
for(int i =0; word[i]!='\0';i++)
{
if(cmpr[word[i]])
{
cout<<"Not all unique";
return false;
}
else
{
cmpr.insert(pair<char,int>(word[i],1));
}
cout<<cmpr[char(word[i])];
}
for(map<char,int>::iterator it = cmpr.begin(); it != cmpr.end();it++)
{
cout<<it->first<<" and "<<it->second<<endl;
}
return true;
}
int main()
{
unique("hello");
}
и мои выходные результаты в (при попытке печати первого и второго значения карте узлов):
e and 0
h and 0
l and 0
o and 0
Предпочитают использовать указатели массива 'std :: string', а не символы. Одной из распространенных проблем с массивами символов является сравнение указателей для упорядочения не целевой строки. –
При поиске 'map', предпочитайте использовать' find', чем '[]'. 'Find' не будет вставлять новый ключ. –