我向 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/