Bonjour j'ai un probleme avec des insertions dans un set, voici quelques lignes du fichier .h
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
struct EtiqSommet {
    PairString pairEtiqVal;
    int idSommet;
};
 
/**
 *  \brief Classe de comparaison des elements EtiqSommet
 */
class EtiqSommetLess : public binary_function<EtiqSommet,EtiqSommet, bool>{
public:
    bool operator()(const EtiqSommet &e1, const EtiqSommet &e2){
 
        return (e1.idSommet<=e2.idSommet);
    }
};
 
/**
 *  \brief Classe de comparaison des elements EtiqArc
 */
class EtiqArcLess : public binary_function<EtiqArc,EtiqArc, bool>{
public:
    bool operator()(const EtiqArc &e1, const EtiqArc &e2){
 
        return (e1.pairIdSommet<e2.pairIdSommet);                                                  
    }
};
 
/**
 *  \brief ensemble qui stocke les elements (v,l) de  descr(g1) inter descr(g2)
 *  redefinition de la fonction de comparaison "less" par defaut avec un foncteur
 *  EtiqSommetLess (comparer deux structures EtiqSommet)
 */ 
typedef std::set<EtiqSommet,EtiqSommetLess> SetEtiqSommet;
typedef SetEtiqSommet::iterator SetEtiqSommetIt;
 
/**
 *  \brief ensemble qui stocke les elements (vi,vj,l) de  descr(g1) inter descr(g2)
 *  redefinition de la fonction de comparaison "less" par defaut avec un foncteur
 *  EtiqArcLess (comparer deux structures EtiqArc)    
 */ 
typedef std::set<EtiqArc,EtiqArcLess> SetEtiqArc;
typedef SetEtiqArc::iterator SetEtiqArcIt;
et ici les lignes de code implementant l'insertion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
simGraph.setElemIntersecArcG1.insert(SetEtiqArc::value_type(elemIntersecArc));
De ce que j'ai compris des documentations en ligne, il definit un foncteur de comparaison EtiqSommetLess et EtiqArcLess.
Ensuite ce foncteur est appele par methode insert() du set, ce qui en theorie specifie comment inserer les objets car c'est le foncteur qui indique si l'element existe deja ds le set. Est-ce bien ca ?

setElemIntersecArc est un set de (EtiqArc arc, int idSommet).

En fait, lorsqu'il declare set<EtiqMachin, EtiqMachinLess> monSet; le 2e parametre correspond a la fonction de comparaison qui est appele au sein de l'insert pour gerer les doublons ds le set ?