OVH Cloud OVH Cloud

Exemples sur utilisation de la STL?

3 réponses
Avatar
Pim
-------- Code.cc ----------
#include <iostream>
#include <fstream>
#include <string>
#include <map>

#define FICHIER "../data/monfichier.txt"
#define LINE_LEN 2048

using namespace std;

int main()
{
map<string,int> words;
char Line[LINE_LEN];
map<string,int>::iterator iter;

ifstream f(FICHIER);

while (f.getline((char *) Line,LINE_LEN)){
words[Line]++;
}

for (iter=words.begin(); iter!=words.end();++iter)
cout << iter->first << " => " << iter->second << endl;
}

--------- Fin du code -------------


Bonjour tous,

Le fichier contient des mots en désordre et qui peuvent être
mentionnés plusieurs fois.
Le but est d'afficher chaque mot et son nombre d'apparition dans
l'ordre du nombre d'apparition dans le fichier.

J'aimerais donc savoir comment je fait dans cet exemple pour afficher
les résultats en les triant par la valeur de l'int et non par
les clefs comme c'est par défaut.

Plus adepte de perl,Je sait que le concept C++ n'est pas comparable
et peut-être plus lié au types et modèles.

En règle générale, j'aimerais savoir ou je peut trouver des exemples
parlants et utiles sur la stl, j'ai déja parcouru internet et je
trouve qu'il y a peu de choses, j'hésite même à acheter un bouquin
au vu de la qualité de ce que j'ai vu.

Je recherche par exemple comment on peut faire des tris:

-trier par la clef, par ou la valeur sur les map par exemple.

Et aussi comment construire son modèle.

Merci de votre aide par avance.
Pim.

3 réponses

Avatar
Jean-Marc Bourguet
Pim writes:
while (f.getline((char *) Line,LINE_LEN)){
string Line;

while (getline(f, line)) {

J'aimerais donc savoir comment je fait dans cet exemple pour afficher
les résultats en les triant par la valeur de l'int et non par
les clefs comme c'est par défaut.


Les map sont une structure triee sur les clefs, il n'y a pas moyen de
changer leur ordre. Il faut donc copier les donnees dans une autre
structure et la trier.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Fabien LE LEZ
On 20 May 2005 10:32:41 GMT, Pim :

J'aimerais donc savoir comment je fait dans cet exemple pour afficher
les résultats en les triant par la valeur de l'int et non par
les clefs comme c'est par défaut.


Tu ne peux pas.

Il te faut un vector<> d'objets "{ int nb; std::string mot; }", que tu
tries avec un prédicat qui compare les "nb".

--
Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>

Avatar
Pim
Le 20 May 2005 10:32:41 GMT,
Pim disait ceci :
-------- Code.cc ----------
#include <iostream>
#include <fstream>
#include <string>
#include <map>

#define FICHIER "../data/monfichier.txt"
#define LINE_LEN 2048

using namespace std;

int main()
{
map<string,int> words;
char Line[LINE_LEN];
map<string,int>::iterator iter;

ifstream f(FICHIER);

while (f.getline((char *) Line,LINE_LEN)){
words[Line]++;
}

for (iter=words.begin(); iter!=words.end();++iter)
cout << iter->first << " => " << iter->second << endl;
}

--------- Fin du code -------------



Merci vivement pour vos réponses claires.
Pim.