[C++]Utilisation du find avec une map
Bonjour,
j'utilise une map un peu complexe, qui a comme clé une classe :
map<C_Key, C_Data> myMap; // C_Key et C_Data sont 2 classes différentes
Le but est d'insérer dans ma map des objets de type <C_Key, C_Data>. Seulement, il faut que je vérifie si l'objet n'existe pas, auquel cas je fais un update de l'objet.
En utlisant la fonction find, la clé n'est jamais retrouvée, alors que j'ai plein de doublons. J'ai défini les différents opérateurs pouvant être utilisés par le find (le code étant dans le source) à l'intérieur de la classe C_Key:
int operator < (const C_Key &otherKey) const;
int operator > (const C_Key &otherKey) const;
int operator != (const C_Key &otherKey) const;
int operator == (const C_Key &otherKey) const;
Voici le code que j'utilise pour le find :
map<C_Key, C_Data*>::iterator iter;
iter = myMap.find(ident_map); // ident_map étant de type C_Key
if (iter != myMap.end())
{
...
}
On ne rentre jamais dans la boucle du "if". Quelqu'un peut-il m'aider svp? Merci d'avance.
j'utilise une map un peu complexe, qui a comme clé une classe :
map<C_Key, C_Data> myMap; // C_Key et C_Data sont 2 classes différentes
Le but est d'insérer dans ma map des objets de type <C_Key, C_Data>. Seulement, il faut que je vérifie si l'objet n'existe pas, auquel cas je fais un update de l'objet.
En utlisant la fonction find, la clé n'est jamais retrouvée, alors que j'ai plein de doublons. J'ai défini les différents opérateurs pouvant être utilisés par le find (le code étant dans le source) à l'intérieur de la classe C_Key:
int operator < (const C_Key &otherKey) const;
int operator > (const C_Key &otherKey) const;
int operator != (const C_Key &otherKey) const;
int operator == (const C_Key &otherKey) const;
Voici le code que j'utilise pour le find :
map<C_Key, C_Data*>::iterator iter;
iter = myMap.find(ident_map); // ident_map étant de type C_Key
if (iter != myMap.end())
{
...
}
On ne rentre jamais dans la boucle du "if". Quelqu'un peut-il m'aider svp? Merci d'avance.
A voir également:
- [C++]Utilisation du find avec une map
- Google map satellite gratuit - Guide
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Find and mount - Télécharger - Récupération de données
- Telecharger carte google map - Guide
3 réponses
Dans une map seule la clé est propre à chaque élément de la map. Cela signifie que tu peux avoir dans une map (k1,d1) (k2,d2) vu que k1!=k2.
Pour l'insertion tu peux utiliser directement l'opérateur [] :
Pour rechercher un élément :
Bonne chance
Pour l'insertion tu peux utiliser directement l'opérateur [] :
my_map[k1]=d1;
Pour rechercher un élément :
std::map<std::string,int> my_map; my_map["janvier"]=1; my_map["fevrier"]=2; //... std::map<std::string,int>::const_iterator mit(my_map.find("fevrier")), mend(my_map.end()); if(mit!=mend){ std::cout << "trouvé ! "<< mit->first << " "<< mit->second << std::endl; }else{ std::cout << "pas trouvé !"; } std::cout << std::endl;
Bonne chance
Merci pour ta réponse. Le problème est toujours le même, il n'arrive pas à trouver l'élément, d'autant plus que la méthode de comparaison du find s'appuie sur des opérateurs pré-définis. Dans ton exemple, le find utilise la méthode de comparaison des string. Dans mon cas, je compare des objets d'une classe quelconque, et c'est pour ça que j'ai dû lui définir l'opérateur <, car sinon il n'acceptait pas la map.
Je pense que t'as dû te dire que je comparais les 2 éléments, au fait je compare bien les clés des 2 éléments à insérer (ident_map est de type C_Key).
Je pense que t'as dû te dire que je comparais les 2 éléments, au fait je compare bien les clés des 2 éléments à insérer (ident_map est de type C_Key).
Par défaut une map utilisera en fait l'opérateur less qui est défini pour les string entre autres (ordre alphabétique). Si ta clé est "un type de base" tu n'as a priori pas besoin de le redéfinir. Dans ton cas il faut redéfinir un operateur, mais j'aurais plutôt utilisé un foncteur que < :
http://c.developpez.com/faq/cpp/?page=STL#STL_functor
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Malheureusement il me faut le morceau de ton code en question pour que je vois d'où vient le problème...
Bonne chance
http://c.developpez.com/faq/cpp/?page=STL#STL_functor
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Malheureusement il me faut le morceau de ton code en question pour que je vois d'où vient le problème...
Bonne chance