gpt4 book ai didi

c++ - 如何更改 map 中的默认整数值?

转载 作者:行者123 更新时间:2023-11-30 03:34:53 25 4
gpt4 key购买 nike

我正在创建一个 map 来比较并查看一个单词的所有字母是否都是唯一的。当我创建这张 map 时,我为相应的字符存储值 1。问题是,当我从字符键打印 map 的值时,我只收到所有值的零。

在尝试对此进行研究时,有人告诉我这是因为 map 的所有值都默认为零,并且必须初始化我的整数才能更改。我不完全清楚整数需要初始化是什么意思,因为我应该能够传递一个文字整数值,对吗?

以下是我目前的代码,正如您将看到的,我正在尝试为单词的字符传入 1,我的代码会检查该字符是否已存在于 map 中:

    #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");
}

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

    e and 0 
h and 0
l and 0
o and 0

最佳答案

这里的问题是

if(cmpr[word[i]])

插入一个元素到 map 中,如果一个元素不存在,它不在这里。也就是说

cmpr.insert(pair<char,int>(word[i],1));

是一个什么都不做的操作,因为键 word[i] 已经存在。

你可以做的是将条件更改为

if(cmpr.find(word[i]) != cmpr.end())

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

cmpr.insert(pair<char,int>(word[i],1));

cmpr[word[i]] = 1;

让它工作


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

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

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

关于c++ - 如何更改 map 中的默认整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41682589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com