fnolisMedlem sedan sep. 200162 inlägg
För alla som har svurit och slängt saker i väggen för att inte fått hash_map:en att funka med string presenterar jag nu en lösning
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
namespace std
{
template<> struct hash< string >
{
size_t operator()( const string& x ) const
{
return hash< const char* >()( x.c_str() );
}
};
}
och sedan för att skapa hash_mappen:
hash_map<string, int, hash<string>, equal_to<string> tmp;
Har tagit mig åtskilliga timmar av sökande, browsande, kompileringar, kaffedrickande, coca-cola konsummerande, svordommar innan jag kom på detta så jag tänkte att jag skulle dela med mig...
netfeedMedlem sedan mars 2001516 inlägg
och vad gör denna string??
lite n00bie
------------------
Look Out!
The Tarntula Is Comming
fnolisMedlem sedan sep. 200162 inlägg
Det är ju inte stringen som är prio här... det var ju att få hash_map:en att funka med std::string. Eftersom hash_mapen inte är med i standard implementeringen av STLen än så har den inte fått alla allokatorer.
En varning till alla som använder hash_map:en med char*. Denna är farlig och allokerar inte minne för det som stoppas in. Allt som sparas är en pekare till minnet där strängen fanns innan. Eftersom man inte ofta använder upp allt minnet så kommer programmet för det mesta att funka, men när man skriver program som äter upp allt minnet på burken (och lite till ^_^*) så kommer programmet att crasha... en annan farlig sak användande av trådar och en hash_map med char*...