gpt4 book ai didi

c++ - HashMap 元素的值未正确打印

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:47 25 4
gpt4 key购买 nike

我向 HashMap 中插入了一对(键,值),但在尝试打印时它似乎没有值

问题是我不知道为什么我不能在下面的代码中打印第二个元素。

让我们看一些代码:

.h

typedef hash_map<const string, string, strptrhash, strptrequal> StringHashMap;  
StringHashMap m_memberNameMap;
typedef pair <const string,string> string_pair;

.cpp

void Powerdomain::addMemberName(const string& name){  

if (m_memberNameMap[name]==""){
m_memberNameMap.insert(string_pair(name,name));
StringHashMap::iterator it = m_memberNameMap.begin();
cout << it->first << endl;
cout << it->second << endl;
cout << m_memberNameMap["MD1"] << endl;
}

with name="MD1"这个输出:

MD1  
*blank*
*blank*

编辑

关于艾伦的回答:

ModuleType * moduletype4=new ModuleType("type4");
ModuleType * value = moduleTypeMap["type4"];

if (value==NULL) {
ModuleType& value2=*moduleTypeMap["type4"];
value2=*moduletype4;
cout << "correctly inserted" << endl;
}
cout << moduleTypeMap["type4"]->getName() << endl;

这行不通。我现在可能很困惑!

最佳答案

m_memberNameMap[name]if 条件下做什么?如果键 name 不存在于映射中,它会使用该键创建一个槽,值等于空字符串。

也就是说,表达式 m_memberNameMap[name] 调用 operator[] 插入一个等于 string_pair(name, "") 的项目如果键 name 不存在,则到 map ,

解决方案是使用find作为:

if (m_memberNameMap.find(name) == m_memberNameMap.end())
{
m_memberNameMap.insert(string_pair(name,name));
//rest of the code...
}

除了 insert 函数,您还可以使用:

   m_memberNameMap[name] = name; //simpler, cute!

毕竟,如果键不存在,operator[] 会创建一个新槽。

关于c++ - HashMap 元素的值未正确打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6057548/

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