Здравствуйте, OriginalZealot, Вы писали:
OZ>Я хочу удалить из карты элементы при помощи remove_if() и своего предиката.
OZ>Контейнер map, как известно, содержит pair, а remove_if() при своей работе использует использует operator =(), который для pair не определен.
OZ>Что же мне делать?
на сколько я помню remove_if() для map не работает. Используем for_each.
Re: STL: remove_if() на контейнере map используя VC++ 7.1
Здравствуйте, OriginalZealot, Вы писали:
OZ>Я хочу удалить из карты элементы при помощи remove_if() и своего предиката.
OZ>Контейнер map, как известно, содержит pair, а remove_if() при своей работе использует использует operator =(), который для pair не определен.
Он определен для std::pair, просто дело в том, что член first этой пары — константа:
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, OriginalZealot, Вы писали:
OZ>>Я хочу удалить из карты элементы при помощи remove_if() и своего предиката.
OZ>>Контейнер map, как известно, содержит pair, а remove_if() при своей работе использует использует operator =(), который для pair не определен. B>Он определен для std::pair, просто дело в том, что член first этой пары — константа: B>
Здравствуйте, Какая разница, Вы писали:
КР> наверное так безопасней будет
КР>
КР> it = m.erase(it);
КР>
Во-первых, этот вариант ничуть не безопасней (в смысле мой вариант абсолютно безопасен), во-вторых, erase(iterator) возвращает итератор только в Dinkum STL, по стандарту этот метод возвращает void.
Любите книгу — источник знаний (с) М.Горький
Re[4]: STL: remove_if() на контейнере map используя VC++ 7.1
Здравствуйте, Bell, Вы писали:
BB>Во-первых, этот вариант ничуть не безопасней (в смысле мой вариант абсолютно безопасен), во-вторых, erase(iterator) возвращает итератор только в Dinkum STL, по стандарту этот метод возвращает void.
Точно
посмотрел в STLPort там void
Блин
долбаный Dinkum STL и долбаный MSDN
Кстати у кого там самый свежий MSDN
Там то хоть help по std::map.erase соответствует стандартам
!0xDEAD
Re[5]: STL: remove_if() на контейнере map используя VC++ 7.1
Здравствуйте, Какая разница, Вы писали:
КР>Здравствуйте, Bell, Вы писали:
BB>>Во-первых, этот вариант ничуть не безопасней (в смысле мой вариант абсолютно безопасен), во-вторых, erase(iterator) возвращает итератор только в Dinkum STL, по стандарту этот метод возвращает void.
КР>Точно КР>посмотрел в STLPort там void КР>Блин КР>долбаный Dinkum STL и долбаный MSDN КР>Кстати у кого там самый свежий MSDN КР>Там то хоть help по std::map.erase соответствует стандартам
Вряд ли они теперь сделают по стандарту — из-за совместимости со старым кодом. А вообще стандартный void вызывает немало нареканий. Если интересно — поищи в форуме по "map + erase + void".
Любите книгу — источник знаний (с) М.Горький
Re[5]: STL: remove_if() на контейнере map используя VC++ 7.1
Здравствуйте, Какая разница, Вы писали:
КР>Здравствуйте, Bell, Вы писали:
BB>>Во-первых, этот вариант ничуть не безопасней (в смысле мой вариант абсолютно безопасен), во-вторых, erase(iterator) возвращает итератор только в Dinkum STL, по стандарту этот метод возвращает void.
КР>Точно КР>посмотрел в STLPort там void КР>Блин КР>долбаный Dinkum STL и долбаный MSDN
Ну конкретно в данном случае имхо у майкрософта сделано в соответствии со здравым смыслом.