Что-то не выходит каменный цветок.
std::set< boost::shared_ptr< Foo > > set;
set.erase
(
std::remove_if
(
set.begin(),
set.end(),
boost::bind( &Foo::Predicate, _1 )
),
set.end()
);
Пытается вызывать оператор присваивания у shared_ptr и обламывается.
Под вечер туго соображаю -- что здесь сделать можно?
Приведи, пожалуйста, описание класса Foo
Вот с таким — все ок (VS 7.1, boost 1.31.0)
class Foo
{
public:
bool Predicate(){return true;}
};
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Здравствуйте, UGN, Вы писали:
UGN>Что-то не выходит каменный цветок.
UGN>UGN>std::set< boost::shared_ptr< Foo > > set;
UGN>set.erase
UGN>(
UGN> std::remove_if
UGN> (
UGN> set.begin(),
UGN> set.end(),
UGN> boost::bind( &Foo::Predicate, _1 )
UGN> ),
UGN> set.end()
UGN>);
UGN>
UGN>Пытается вызывать оператор присваивания у shared_ptr и обламывается.
UGN>Под вечер туго соображаю -- что здесь сделать можно?
std::remove_if неприменим для оссоциативных контейнеров, поскольку использует копирование элементнов. В случае же ассоциативных контейренов — ключ является константой, и изменить его (присвоить новое значение) нельзя.
Выход — использовать явный цикл.
ЗдесьАвтор: maslukov
Дата: 06.10.04
есть примеры.
Здравствуйте, Bell, Вы писали:
B>std::remove_if неприменим для оссоциативных контейнеров, поскольку использует копирование элементнов.
Да, знатно я вчера протупил...