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