Nie, to niemożliwe. Komparator jest częścią typu mapy. Pytanie nie różni się od pytania, czy można zmienić numer int
, aby przechowywać liczby zmiennoprzecinkowe.
Co ważniejsze, zamówienie dostarczone przez komparator jest integralną częścią wewnętrznej struktury mapy. Jeśli chcesz zmienić kolejność, struktura danych nie będzie już spójna.Jedyną realną opcją jest, aby odbudować nową mapę z elementami Stara mapa w odniesieniu do nowego porządku, ale to już możliwe:
std::map<T, V, Comp1> m1 = /* ... */;
std::map<T, V, Comp2> m2(m1.begin(), m1.end());
Alternatywnie, można dokonać drugą mapę typu std::map<std::reference_wrapper<T const>, std::reference_wrapper<V>, Comp2>
i wypełnić go z referencjami do oryginalnej mapy, ale zamówione zgodnie z Comp2
. W takim przypadku odpowiedzialność za utrzymanie synchronizacji dwóch map spoczywa na użytkowniku. Zaawansowany kontener, taki jak Boost.Multiindex, może zrobić to dla Ciebie w bezpieczny sposób.
Czy widzisz tutaj funkcję, która pozwala ci to zrobić bezpośrednio: http://pl.cppreference.com/w/cpp/container/map? Jeśli nie, odpowiedź brzmi: nie ... – Nim
Jest to parametr szablonu, więc musi zostać naprawiony w czasie kompilacji. Zmiana spowoduje zmianę typu kontenera. – v154c1