dans ton code:
1 2 3 4 5 6 7 8
| StringFactor::StringFactor(const char *string, uint pos, uint kmer_length) {
m_factor = new char[kmer_length+1]; // +1 pour le 0 terminal
strncpy(m_factor, string.substr(pos,kmer_length),kmer_length);
}
~StringFactor()::StringFactor(){
delete [] m_factor;
} |
m_factor a une taille fixe (kmer_length + 1) et kmer est petit (25?).
Du coup allouer avec new ca a peu d'interet. Il vaut mieux le mettre comme un tableau (char m_factor[kmer_length])
ensuite, substr() cr�e une allocation aussi, c'est ce que j'essayais d'�viter.
strncpy(m_factor, string.substr(pos,kmer_length),kmer_length);
strncpy(m_factor, string.c_str() + pos, kmer_length);
est bien plus efficace car il ne cr�e pas un string temporaire, donc �vite une allocation
Pour le hash, c'est parce que le hashmap attend un hash sur StringFactor. Or toi tu lui donnes un hash capable de hasher les char*, ce n'est pas le m�me type. C'est pour ca que j'ai ajout� un operator() qui sait comment hasher les StringFactor (note qu'en fait il ne sait pas hasher, mais il sait demander au hash<const char *> de faire le boulot)
pour ton erreur, c'est la seule que tu as? car je vois que non seulement ton hash ne marcherait pas normalement, mais en plus que
strncpy(m_factor, string.substr(pos,kmer_length),kmer_length);
n'est pas cens� compiler.
a priori je vois pas; reposter le code aiderait
Partager