我是c ++中hash_map的新手.我必须将表转换为hashmap.
这就是我在程序中声明和使用hash_map的方法
我正在使用微软视觉工作室.
#include <hash_map>
using namespace stdext;
typedef hash_multimap <const char*, long > HEAPTABLE;
typedef HEAPTABLE::iterator HEAP_ITER;
class CTest
{
public:
void setSwitchID(long i);
long getSwitchID();
void isUpgrading(bool bTest);
private:
HEAPTABLE m_hashMap;
};
void CTest::setSwitchID(long dwID)
{
HEAP_ITER hIter = m_hashMap.find("SwitchId");
if (hIter != m_hashMap.end())
{
hIter->second = dwID;
}
else
{
m_hashMap.insert(make_pair("SwitchId", dwID));
}
}
long CTest::getSwitchID()
{
HEAP_ITER hIter = m_hashMap.find("SwitchId");
if (hIter != m_hashMap.end())
{
return hIter->second;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
CTest* test = new CTest;
if (test)
{
test->setSwitchID((DWORD)i);
test->isUpgrading(false);
}
delete test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我将它作为一个单独的程序运行时,此代码工作正常,但当我尝试将其作为项目的一部分运行时,应用程序崩溃.即使地图中没有条目,set函数中的hIter也会返回错误的指针.这是因为记忆腐败吗?能否请你帮忙?
如果它是一个堆腐败,我怎么能避免这种情况?无论如何我可以说用这个大小创建一个hash_map吗?
hash_multimap <const char*, long >不会做你认为它做的事情.关键是指针不是字符串.你的小程序运行良好的编译器使用相同的内存两个"SwitchId"字符串文字.在较大的项目中情况并非如此.
使用std::string作为重点,而不是和,而在这里,切换到std::unordered_multimap.