Salut,
Tout type capable d'apporter une réponse à une comparaison de type "plus petit que" peut être utilisé comme clé.
Le tout, est qu'il faudra sans doute prévoir un foncteur permettant de mettre cette comparaison en oeuvre.
Le cas échéans, tu pourrais même tout à fait envisager un comportement polymorphique grâce à une arborescence correcte.
Ainsi, une classe proche de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class MaCle
{
public:
MaCle(/*paramètres éventuels */);
/*virtual */ ~MaCle();
struct less
{
bool operator()(const MaCle& c1, const MaCle& c2)
{
/* toute la logique permettant de déterminer c1<c2 */
}
};
/* il peut y avoir d'autres méthodes */
private:
/* les membres de la classe */
}, |
pourra sans aucun problème être utilisé comme clé dans une std::map.
Elle sera utilisée sous une forme proche de
std::map<MaCle, objetGere, MaCle::less > lamap;
et tu pourrais tout à fait effectuer une recherche sous une forme proche de
1 2 3 4
| if( lamap.find(MaCle(/* paramètres nécessaires */)!=lamap.end())
{
/*l'objet existe dans la map */
} |
ou, si tu préfère l'écriture "conventionnelle":
1 2 3 4 5
| MaCle tofind/* (paramètres nécessaires) */;
if(lamap.find(tofind) != lamap.end())
{
/* bla, bla bla */
} |
Partager