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 : 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;
}
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 : 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);
        }
    }    
}
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.