J'ai le problème suivant - Je veux compter les occurrences de chaque mot dans un fichier. J'utilise un map<string,Count>
donc la clé est l'objet de chaîne représentant le mot, et la valeur étant regardé est l'objet qui tient le compte des chaînes de sorte que:incrémenter la valeur dans la carte en utilisant l'insertion C++
class Count {
int i;
public:
Count() : i(0) {}
void operator++(int) { i++; } // Post-increment
int& val() { return i; }
};
Le problème est que je veux utiliser insert()
au lieu du operator[]
. Voici le code.
typedef map<string, Count> WordMap;
typedef WordMap::iterator WMIter;
int main() {
ifstream in("D://C++ projects//ReadF.txt");
WordMap wordmap;
string word;
WMIter it;
while (in >> word){
// wordmap[word]++; // not that way
if((it= wordmap.find(word)) != wordmap.end()){ //if the word already exists
wordmap.insert(make_pair(word, (*it).second++); // how do I increment the value ?
}else{
...
}
for (WMIter w = wordmap.begin();
w != wordmap.end(); w++)
cout << (*w).first << ": "
<< (*w).second.val() << endl;
}
Quel est le problème avec l'aide d'un 'std :: map 'et' wordmap [mot] ++; '? –
NathanOliver
@NathanOliver Je fais quelques exercices et je devais le faire avec 'insert()'. Quoi qu'il en soit, la réponse ci-dessous a été claire pour moi. – yooo123
Si la valeur existe déjà, 'insert' n'insèrera rien. –