Bonjour à tous,

j'ai actuellement un petit problème avec la librairie STL, concernant la classe std::set.

Je veux créer un ensemble de structures, dont l'ordre est donné par un élément de la structure.
Je pense que mon code sera plus parlant :

Voila la définition de la structure en question, avec la fonction de comparaison qui compare uniquement le champ 'etiq'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
typedef struct{
	int etiq;
	set<string> identites;
}hash_table;
 
struct H_Compare     // fonction de comparaison des table de hachage par rapport à l'etiquette
{
	bool operator()(hash_table H1, hash_table H2)
	{
		return H1.etiq - H2.etiq;
	}
};
Ce que je veux c'est : a chaque fois que je rencontre une etiquette 'etiq', je veux pouvoir vérifier que si elle est déjà dans une des structures présentes dans l'ensemble.

Dans le cas ou l'etiquette existe, je dois modifier le champ 'identities' correspondant à cette structure dans l'ensemble.

Dans le cas contraire, je dois ajouter à cette ensemble une nouvelle structure contenant l'étiquette rencontrée.

J'espère que je m'exprime assez clairement...

Voila ce que j'ai écrit pour l'instant.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
hash_table Hash;
set<hash_table, H_Compare> DB;
 
string str;                                         // éléments à insérer dans le champ 'identities'
strncpy(tmp, file_cur->d_name, 7);
tmp[7] = '\0';
str.assign(tmp);
 
if(DB.find(etiq) == DB.end())  //si l'etiquette n'existe pas
{
	Hash.etiq = etiq;
	(Hash.identites).insert(str);
	DB.insert(Hash);
 
}
Mais je vous avouerais que j'ai un doute énorme sur le bon fonctionnement de ce que j'ai écrit, sans oublier que je ne vois pas comment faire lorsque l'étiquette est trouvée...

Merci de l'aide pour vous pourrez m'apporter