Boost logo

Boost Users :

Subject: Re: [Boost-users] Using boost::bind with stl algorithms
From: lfrfly_at_[hidden]
Date: 2010-08-23 13:28:35


>On Mon, Aug 23, 2010 at 04:49:58PM +0100,
przemyslaw.sliwa_at_[hidden]
>wrote:
>> I have the following question. I have two containers
>>
>> std::set<std::string> insertedEvents;
>> std::vector<std::string> eventNames;
>>
>> How I would like to copy all those elements from eventNames which
are not
>> in insertedEvents. Can this can be done somehow using the
boost::bind
>> feature?
>
><algorithm> contains std::set_difference, which is most probably what
you want,
>assuming that eventNames is sorted.
>
>If it's not,
>
>std::remove_copy_if(eventNames.begin(),eventNames.end(),
> std::back_inserter(out),
> boost::bind(&std::set<std::string>::count,
boost::cref(insertedEvents), _1)
>);
>
>That is, bind the count member function of std::set to your set of
>events, and evaluate that for each element in your range.
>
>Of course, something like Phoenix or Lambda would make the predicate
>easier on the eyes.

It's worth noting that if your compiler supports C++0x lambdas (gcc
4.5+ or VS2010), then the predicate becomes
std::remove_copy_if(eventNames.begin(),eventNames.end(),
  std::back_inserter(out),
   [&insertedEvents](const std::string &s){ return
insertedEvents.find(s) != insertedEvents.end(); });
and there is no need for Boost involvement at all.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net