我是新來的散列圖在c + +。我必須將錶轉換爲hashmap。hash_map第一次查找時大小爲零時崩潰
這是怎麼了我已經宣佈,在我的節目
我使用Microsoft Visual Studio使用的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;
}
此代碼工作正常,當我運行它作爲一個單獨的程序,但是當我嘗試運行它作爲我的項目的應用程序崩潰的一部分。即使映射中沒有條目,set函數中的hIter也會返回錯誤的指針。這是因爲存在腐敗嗎?能否請你幫忙?
如果是堆腐敗,我該如何避免這種情況?無論如何,我可以說創建一個這個大小的hash_map?
你是否需要使用'hash_map'(或任何非標準容器)?你不能只使用'std :: map'嗎? – birryree 2010-12-11 04:35:18
請注意,hash_map僅適用於Microsoft Visual Studio,您可能會考慮學習未來標準的unordered_map。 – unsym 2010-12-11 04:36:56