Boost logo

Boost Users :

Subject: [Boost-users] [phoenix] how to compare std:string
From: Michael Caisse (boost_at_[hidden])
Date: 2009-07-11 22:02:55


Hi all -

I have a vector of std::pair< std::string, int > and I want to
use std::find_if to get the location where the std::pair first is some
string value.

I have successfully performed the correct incantation to compare the
std::pair second to an int; however, it eludes me to what I need for
the string.

This is my test ----------------------------------

#include <vector>
#include <algorithm>
#include <boost/spirit/home/phoenix/core.hpp>
#include <boost/spirit/home/phoenix/operator.hpp>
#include <boost/spirit/home/phoenix/bind/bind_member_variable.hpp>

int main()
{
   using namespace boost::phoenix;
   using namespace boost::phoenix::arg_names;

   typedef std::pair< std::string, int > node_type;
   typedef std::vector< node_type > node_storage_type;

   node_storage_type my_nodes;
   my_nodes.push_back( std::pair< std::string, int >( "foo", 8 ) );

   // this works great
   node_storage_type::iterator iter = std::find_if( my_nodes.begin(), my_nodes.end(),
                                                     bind( &node_type::second, arg1 ) == 8 );

   // compilation error here: ..\..\..\library\vendor\boost_1_38_0\boost/spirit/home/phoenix/operator/comparison.hpp(27) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)
   //
   iter = std::find_if( my_nodes.begin(), my_nodes.end(),
                         bind( &node_type::first, arg1 ) == "foo" );

   return 0;
}

Thanks !

michael

-- 
----------------------------------
Michael Caisse
Object Modeling Designs
www.objectmodelingdesigns.com

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