C++ 如何更改地图中的默认整数值?

C++ 如何更改地图中的默认整数值?,c++,dictionary,hashmap,C++,Dictionary,Hashmap,我正在创建一个地图来比较一个单词的所有字母是否都是唯一的。当我创建此贴图时,我为相应的角色存储值1。问题是,当我从字符键打印贴图的值时,我只收到所有值的零 在试图研究这一点时,有人告诉我这是因为映射的所有值都默认为零,我的整数必须初始化才能更改。我不完全清楚他们所说的需要初始化的整数是什么意思,因为我应该能够传入一个文本整数值,对吗 以下是我当前拥有的代码,正如您将看到的,我正在尝试为单词的字符传入1,并且我的代码检查该字符是否已存在于地图中: #include <iostream

我正在创建一个地图来比较一个单词的所有字母是否都是唯一的。当我创建此贴图时,我为相应的角色存储值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");
}

这里的问题是

if(cmpr[word[i]])
如果一个元素不存在(此处不存在),则将其插入到映射中。也就是说

cmpr.insert(pair<char,int>(word[i],1));
因为
find
不会插入元素或更改

cmpr.insert(pair<char,int>(word[i],1));
让它发挥作用


但请注意,这些都不是真正必要的。如果使用
std::sting
std::set
则整个函数可以写成

bool unique(const std::string& word)
{
    return std::set(word.begin(), word.end()).size() == word.size();
}

它的作用是从
字符串
构造一个
,而
具有相同的机制,只要它只允许唯一的键。这意味着,如果大小不相同,则其中至少有一个重复字符。

您可以使用带有增量的默认值:

if (cmpr[word[i]]++ != 0)
    // value was already present

这增加了额外的好处(取决于您如何看待它),您可以在添加数据后获得每个字符的出现次数。

更喜欢使用
std::string
而不是字符数组指针。字符数组的一个常见问题是比较指针的顺序而不是目标字符串。搜索
映射
时,更喜欢使用
查找
,而不是
[]
find
不会插入新键。或者修复条件以检查元素是否存在而不插入一个(
map::find()
成员函数)@BenVoigt Wow。真不敢相信我竟然忘了。再次感谢。
cmpr[word[i]] = 1;
bool unique(const std::string& word)
{
    return std::set(word.begin(), word.end()).size() == word.size();
}
if (cmpr[word[i]]++ != 0)
    // value was already present