Re: boost::shared_ptr и erase-remove_if
От: Bell Россия  
Дата: 07.10.04 06:28
Оценка: 11 (2) +1
Здравствуйте, 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
есть примеры.
Любите книгу — источник знаний (с) М.Горький
Re[2]: boost::shared_ptr и erase-remove_if
От: UGN  
Дата: 07.10.04 06:56
Оценка: :)
Здравствуйте, Bell, Вы писали:

B>std::remove_if неприменим для оссоциативных контейнеров, поскольку использует копирование элементнов.


Да, знатно я вчера протупил...
boost::shared_ptr и erase-remove_if
От: UGN  
Дата: 06.10.04 16:30
Оценка:
Что-то не выходит каменный цветок.

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 и обламывается.

Под вечер туго соображаю -- что здесь сделать можно?
Re: boost::shared_ptr и erase-remove_if
От: unrealalex Россия  
Дата: 06.10.04 17:31
Оценка:
Приведи, пожалуйста, описание класса Foo

Вот с таким — все ок (VS 7.1, boost 1.31.0)
class Foo
{
public:
    bool Predicate(){return true;}
};
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Re: boost::shared_ptr и erase-remove_if
От: Юнусов Булат Россия  
Дата: 06.10.04 20:26
Оценка:
Здравствуйте, UGN, Вы писали:

А ты точно не с мапом пытался remove_if вызвать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.