Bonjour,
Je rencontre un problème à l'utilisation de std::set. Mon objectif est d'effacer un élément donné au moyen de set::erase. Cependant cette fonction est sans effet, j'ai déterminé que le problème se situe plutôt dans la recherche de l'élément, en effet ce code:
Donne une fois exécuté dans son contexte:
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 set<Entity*,drawPriorityComparison>& layer = m_draw_layers[ent->getDrawLayer()]; cout << "Searching for: " << ent << endl; for (set<Entity*,drawPriorityComparison>::iterator it = layer.begin(); it != layer.end(); ++it) { cout << *it << endl; } set<Entity*,drawPriorityComparison>::iterator it = layer.find(ent); if (it == layer.end()) { cout << "it is set::end" << endl; }
Comment se fait-il que set::find ne trouve pas le pointeur que je recherche alors qu'il est manifestement présent et accessible lors d'une transversale du set?
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 Searching for: 0x8d9da80 0x8d9e080 0x8d9e000 0x8d9df80 0x8d9df00 0x8d9de80 0x8d9de00 0x8d9dd80 0x8d9dd00 0x8d9dc80 0x8d9dc00 0x8d9db80 0x8d9db00 0x8d9da80 0x8d9e100 0x8d9eb00 0x8d9ea80 0x8d9ea00 0x8d9e980 0x8d9e900 0x8d9e880 0x8d9e800 0x8d9e780 0x8d9e700 0x8d9e680 0x8d9e600 0x8d9e580 0x8d9e500 0x8d9e480 0x8d9e400 0x8d9e380 0x8d9e300 0x8d9e280 0x8d9e200 0x8d9e180 it is set::end
Merci d'avance.
Partager