Map, Set et range-based for
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:
Code:
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;
} |
Mon but est de mettre � jour x au sein de la map.
Je n'ai pas trouver d'autres moyen que de faire le code suivant:
Code:
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);
}
}
} |
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)?
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.