Bonjour � tous,
A ma grande stup�faction, je n'arrive pas � utiliser le range-based for avec une std::map qui a pour cl� un std::string et pour valeur un std::set<Foo>.
Foo est construit de la mani�re suivante:
Mon but est de mettre � jour x au sein de la map.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 struct Foo { Foo() : id(ID++), x(42) {} Foo(const Foo&) = default; Foo(Foo&&) = default; int id; int x; }; bool operator<(const Foo& f1, const Foo& f2) { return f1.id < f2.id; }
Je n'ai pas trouver d'autres moyen que de faire le code suivant:
Le probl�me de ce code est que je fais de nombreuses copies. Serait-il possible de simplement modifier le contenu de mes objets (Sans changer de conteneur)?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 void modifyMap(std::map<std::string, std::set<Foo>>& mFoo) { for (auto& kv : mFoo) { auto tmp = kv.second; kv.second.clear(); for (auto foo : tmp) { auto tmpFoo = foo; tmpFoo.x = 5; kv.second.insert(tmpFoo); } } }
Merci
Edit: J'ai r�ussi en utilisant des pointeurs (std::shared_ptr pour �tre plus pr�cis) mais du coup on perd la notion de droit d'�criture. Si certains ont d'autres id�es en utilisant directement les objets, je suis preneur. Je mettrais r�solu d'ici 2-3 jours sinon.
Partager