Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Сыроежка, Вы писали:
С>>Спасибо за пример. Но я наверное нечетко сформулировал свой исходный вопрос. Меня удивило, что в контейнере std::map нет функции-члена reverse Естественно я сделал предположение, что если такой функции-члена класса нет, то наверное легко эту операцию сделать с помощью стандартных алгоритмов. но стандартный алгоритм std::reverse по понятным причинам не подходит.
С>>Поэтому и возник вопрос, как с помощью стандартных алгоритмов сделать подобную операцию для std::map. Может быть в boost такой алгоритм существует, если с помощью стандартных алгоритмов нужно исхитряться?
M>Задача не совсем понятна, но попробую отгадать.
M>Вариант 1 — надо что-то сделать с элементами в обратном порядке
M>M>std::foreach( map.rbegin(), map.rend(), doSomething() );
M>
M>Вариант 2 — сделать map с обратным порядком —
M>Тут надо просто компаратор другой для второго map'а задать.
M>Но вообще, это вроде очевидные решения, я наверно задачи не понял.
Задача простая: для заданного контейнера
std::map реверсировать отображаемые значения.
Хочу понять, почему такой алгоритм не включен в качестве функции-члена класса
std::map. Если он не включен, то наверное предполагается, что сделать это просто с помощью стандартных алгоритмов. Ведь какие основные принципы включения или не включения алгоритмов к ачестве функций-членов контейнеров? Первое- это невозможность сделать данную операцию с помощью стандартного алгоритма. например, стандартный алгоритм
std::sort требует наличия итераторов произвольного доступа. Так как в контейнере
std::list итератор не является итератором произвольного доступа, то этот алгоритм включили в качестве функции-лена класса для контейнера
std::list Второе — это если делать алгоритм членом класса, то можно достичь большей эффективности. Такие алгоритмы включены, например, в класс
std::basic_string.
Поэтому и возник вопрос, раз алгоритм
reverse не включен в контейнер
std::map в качестве члена класса, то наверное его можно как-то достаточно просто реализовать с помощью стандартных алгоритмов? да причем так, чтобы каждый программист не открывал для себя заново велосипед.