首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改映射中的默认整数值?

如何更改映射中的默认整数值?
EN

Stack Overflow用户
提问于 2017-01-16 18:13:10
回答 2查看 71关注 0票数 1

我正在创建一个地图来比较和看看一个单词的所有字母是否都是唯一的。当我创建这个映射时,我存储对应字符的值1。问题是,当我从字符键打印映射值时,我只接收所有值的零。

在试图研究这个问题时,有人告诉我,这是因为所有的映射值都默认为零,我的整数必须初始化才能改变。我不完全清楚他们所说的整数意味着什么需要初始化,因为我应该能够传递一个字面整数值,对吗?

下面是我目前拥有的代码,正如您将看到的,我正试图为单词的字符传入1,而我的代码检查该字符是否已经存在于地图中:

代码语言:javascript
复制
    #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");
}

和我的输出结果(当试图打印映射节点的第一个和第二个值时):

代码语言:javascript
复制
    e and 0 
    h and 0
    l and 0
    o and 0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-16 18:21:26

这里的问题是

代码语言:javascript
复制
if(cmpr[word[i]])

如果不存在元素,则将元素插入到映射中,而此处不存在。这意味着

代码语言:javascript
复制
cmpr.insert(pair<char,int>(word[i],1));

是一个无所事事的操作,因为键word[i]已经存在。

你能做的就是改变对

代码语言:javascript
复制
if(cmpr.find(word[i]) != cmpr.end())

因为find不会插入元素或更改

代码语言:javascript
复制
cmpr.insert(pair<char,int>(word[i],1));

代码语言:javascript
复制
cmpr[word[i]] = 1;

才能让它发挥作用

不过,请注意,所有这些都不是真正必要的。如果使用std::stingstd::set,则整个函数可以编写为

代码语言:javascript
复制
bool unique(const std::string& word)
{
    return std::set(word.begin(), word.end()).size() == word.size();
}

这样做的目的是从string构造一个string,并且set具有相同的机制,如果它只允许唯一的键。这意味着,如果大小不一样,那么至少有一个重复的字符在那里。

票数 2
EN

Stack Overflow用户

发布于 2017-01-16 18:32:28

可以将默认值与增量一起使用:

代码语言:javascript
复制
if (cmpr[word[i]]++ != 0)
    // value was already present

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41682589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档