vector find

stl vectorÇü¿¡ ±¸Á¶Ã¼¸¦ µ¥ÀÌÅÍ ÇüÀ¸·Î »ç¿ë ÇÏ´Â °æ¿ì °Ë»öÀ» ¾î¶»°Ô ÇÒ±î?

°¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¹Ýº¹ÀÚ¸¦ for ±¸¹® µ¹¸é¼­ ³¡±îÁö °Ë»ö Çϸ鼭 if¹®À¸·Î °Ë»öÇÏ´Â ÀϹÝÀüÀÎ ¹æ¹ýÀÌ ÀÖ´Ù.

µÎ ¹ø°´Â ÇÔ¼ö °´Ã¼¸¦ »ç¿ëÇÏ¿© ºñ±³ ÇÔ¼ö °´Ã¼¸¦ stl::find_if( )ÀÇ 3¹ø° ÀÎÀÚ·Î ³Ñ°ÜÁÖ¸é µÈ´Ù.

#include  <algorithm>

#include  <vector>

#include  <string>

 

struct  Customer

{

    int  id;

    std::string name;

    std::string city;

    Customer( int  _id, const char  *_name, const  char  *_city )

        : id( _id ) 

        , name( _name )

        , city( _city )

    {

    };

};

 

struct  CompareCustomer

{

    int  num;

    bool  operator() ( Customer &customer ) const

    {

        return ( customer.id == num );

    }

};

 

int  _tmain( int argc, _TCHAR* argv[])

{

    std::vector< Customer > arr;

    arr.push_back( Customer( 2, "Kim", "Seoul" ) );

    arr.push_back( Customer( 51, "Choi", "Busan" ) );

    arr.push_back( Customer( 31, "Park", "Gyeonggi-do" ) );

 

    CompareCustomer compare;

    compare.num = 31;

    std::vector< Customer >::iterator iter = std::find_if( arr.begin(), arr.end(), compare );

 

    if( iter != arr.end() )

    {

        printf( "%s lives in %s\n", iter->name.c_str(), iter->city.c_str() );

    }

 

    return 0;

}

CompareCustomer ±¸Á¶Ã¼(Ŭ·¡½ºµµ ±¦ÂúÀ½)ÀÇ ÇÔ¼ö °´Ã¼ ¿¬»êÀÚ opertator( )¿¡¼­ num°ú °°À¸¸é true¸¦ ¹ÝȯÇÑ´Ù.