Bonjour,
Alors voilà l'histoire.
J'ai une structure T...
... 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 struct T { int x; int y; };
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.
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;
É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 :
Cela marche.. À peu près :
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); }
Output : foo.
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";
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 ?
Partager