PDA

View Full Version : [C++] Array associativi


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

cionci
20-05-2010, 18:44
Vedo che stai usando gcc...hai provato std::hash_map ? Non è standard, ma è definita in molti compilatori.

grana
21-05-2010, 10:00
Vedo che stai usando gcc...hai provato std::hash_map ? Non è standard, ma è definita in molti compilatori.
Grazie per la dritta, il problema comunque era dovuto a questo (http://forum.ubuntu-it.org/index.php/topic,386628.0.html).

grana