Bonjour,

Alors voilà l'histoire.

J'ai une structure T...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
struct T
{
            int x; 
            int y;
};
... et un set de T, triés selon x :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
struct Compare
{
            bool operator() (T a, T b) const
            {
                return (a.x < b.x);
            }
};
 
std::set<T,Compare> set;
J'aimerais que les éléments soient triés selon x, mais je voudrais aussi pouvoir chercher un élément dans mon set en fonction de y, sans avoir à faire une recherche de complexité N.

Étant donné que dans mon programme, tous les T que j'ajoute ont un y différent, je me dis qu'il y a un petit truc à faire au niveau de la fonction de Compare. Pour l'instant j'en suis à quelque chose comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
bool operator() (T a, T b) const
{
if (a.y != b.y)
return (a.x < b.x);
else
return (a.y < b.y);
}
Cela marche.. À peu près :

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
 
T a = {4,6};
        T b = {1,3};
        T d = {7,9};
 
        set.emplace(a);
        set.emplace(b);
        set.emplace(d);
 
        T tmp;
        tmp.y = 3;
 
        if (set.count({0,3}))
            std::cout << "foo";
 
  if (set.count({10,3}))
            std::cout << "bar";
Output : foo.

Le résultat dépend donc de la valeur x du T que je cherche, ainsi que des valeurs x déjà présentes dans le set (alors que seul le y m'intéresse), mais je ne comprends pas trop quelle valeur de x me permettrait d'obtenir le résultat que je veux, à chaque fois.

Any idea ?