set : recherche count() selon une fonction compare() différente de emplace()
Bonjour,
Alors voilà l'histoire.
J'ai une structure T...
Code:
1 2 3 4 5 6
|
struct T
{
int x;
int y;
}; |
... et un set de T, triés selon x :
Code:
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:
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:
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 ? :D