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

标签 c++ hashmap

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

相关文章:

c++ - 为 BinaryTree 类创建迭代器的算法

c++ - 具有模板化继承的纯虚函数

c++ - 模板上的神秘错误

c++ - C++ 中结构的构造函数导致非零退出代码

java - HashMap 不可序列化

struct - 遍历struct Hashmap并将值添加到self的另一部分

java - 在java集合中存储数据库数据(多对多关系)的最佳方法

hashmap - 为什么使用HashMap的or_insert时会调用闭包?

c++ - 如何应用泛洪算法为加权二维矩阵找到指定源位置和目标位置之间的最佳路径

c++ - 在 C++ 中有一个包含不同类型键的映射