Boost logo

Boost Users :

Subject: Re: [Boost-users] [lambda] Defining a predicate for std::find_if if the key to a std::map is std::pair
From: Roman Perepelitsa (roman.perepelitsa_at_[hidden])
Date: 2009-09-24 03:34:02


2009/9/24 Ryan McConnehey <mccorywork_at_[hidden]>

> I have the following std::map signature.
>
> typedef std::pair<std::string, int> cPair;
> typedef std::map<cPair, std::vector<classA> > cMap;
> cMap myMap;
>
> When entering values into the map, the std::string is the only part of the
> key that needs to be unique. Upon retrieving map values both values of the
> key need to be compared. I've tried to define my insert comparison as
> follows, but am uncertain how to define the predicate with boost::lambda.
>
> std::string givenName = "some_text_value";
> int givenInt = 3;
> cMap::const_iterator itor = std::find_if( myMap.begin(), myMap.end(),
> boost::lambda::bind( ??? , _1) == givenName );
>

cMap::const_iterator itor =
    std::find_if(myMap.begin(), myMap.end(),
                 boost::lambda::bind(&cMap::value_type::first, _1) ==
givenName);

Note that you can use std::map::find instead:

cMap::const_iterator itor = myMap.find(givenName);

Roman Perepelitsa.



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