Je suis nouveau sur hash_map en C++. Je dois convertir une table en hashmap.hash_map plantant lors de la première recherche lorsque la taille est nulle
Voilà comment je l'ai déclaré et l'utilisation hash_map dans mon programme
J'utilise Microsoft Visual Studio.
#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;
}
Ce code fonctionne très bien quand je le lance comme un programme distinct mais lorsque je tente l'exécuter dans le cadre de mon projet, l'application se bloque. Même s'il n'y a pas d'entrée dans la carte, le hIter de la fonction set renvoie un mauvais pointeur. Est-ce à cause de la corruption de memeory? S'il te plait peux-tu aider?
S'il s'agit d'une corruption de tas, comment puis-je éviter cela? Y at-il de toute façon je peux dire créer un hash_map avec cette taille?
Avez-vous besoin d'utiliser 'hash_map' (ou l'un des conteneurs non standard)? Ne pouvez-vous pas simplement utiliser 'std :: map'? – birryree
Notez que hash_map est uniquement Microsoft Visual Studio, vous pouvez envisager d'apprendre le unordered_map pour le futur standard. – unsym