grana
20-05-2010, 13:31
Ciao,
ho un problema con un'implementazione di un array associativo.
Fondamentalmente, la struttura è di questo tipo
namespace mine {
struct myHash
{
size_t operator()(std::string s) const {
size_t h=__gnu_cxx::hash<const char *>()(s.c_str());
return h;
}
};
namespace {
typedef std::map<std::string, std::pair<std::string, int> > QP;
//typedef google::dense_hash_map<std::string, std::pair<std::string, int>, myHash > QP;
}
class myClass {
private:
static google::dense_hash_map<std::string, QP, myHash> QPs;
[...]
}
}
Considerate che ho già provato a sostituire le dense_hash_map con normali std::map.
Comunque: QPs contiene 1 o 2 elementi, almeno inizialmente, ma mi serve che sia un array associativo per flessibilità di programmazione e di esecuzione.
QPs ha come valori delle map "QP" che invece contengono parecchie migliaia di elementi.
Ora, veniamo al problema: l'accesso alla singola mappa QP è LENTISSIMO, sia con std::map che con dense_hash_map
La chiamata a QPs["it"], per dire, richiede 3 millesimi, la chiamata a QPs["it"]["parola"] richiede un solo millesimo in più.
Potete aiutarmi a capire perchè, ed eventualmente consigliarmi una struttura migliore per QPs che probabilmetne non va tanto bene con così pochi elementi?
Grazie!
grana
ho un problema con un'implementazione di un array associativo.
Fondamentalmente, la struttura è di questo tipo
namespace mine {
struct myHash
{
size_t operator()(std::string s) const {
size_t h=__gnu_cxx::hash<const char *>()(s.c_str());
return h;
}
};
namespace {
typedef std::map<std::string, std::pair<std::string, int> > QP;
//typedef google::dense_hash_map<std::string, std::pair<std::string, int>, myHash > QP;
}
class myClass {
private:
static google::dense_hash_map<std::string, QP, myHash> QPs;
[...]
}
}
Considerate che ho già provato a sostituire le dense_hash_map con normali std::map.
Comunque: QPs contiene 1 o 2 elementi, almeno inizialmente, ma mi serve che sia un array associativo per flessibilità di programmazione e di esecuzione.
QPs ha come valori delle map "QP" che invece contengono parecchie migliaia di elementi.
Ora, veniamo al problema: l'accesso alla singola mappa QP è LENTISSIMO, sia con std::map che con dense_hash_map
La chiamata a QPs["it"], per dire, richiede 3 millesimi, la chiamata a QPs["it"]["parola"] richiede un solo millesimo in più.
Potete aiutarmi a capire perchè, ed eventualmente consigliarmi una struttura migliore per QPs che probabilmetne non va tanto bene con così pochi elementi?
Grazie!
grana