블로그는 나의 힘!
[ Programing ]/STL & Booster2011. 10. 10. 13:10
struct ITEMSORT

      int slot;
      int index;
      int type;
      int subType;
      int option;
 
      ITEMSORT()
      {
           memset( this, 0x00, sizeof(ITEMSORT) );
      }

      bool IsValid() const
      {
            if( 0 > index ) return false;
            //if( 0 > type ) return false;
            //if( 0 > subType ) return false;
      }

};

/* functor, item's sort condition */
struct lt_ITEMSORTBASE
{
      bool operator()( const ITEMSORT& lhs, const ITEMSORT& rhs ) const
      {
             // empty slot check
             if( 0 > lhs.IsValid() ) return false;
             if( 0 > rhs.IsValid() ) return true;
  
            //return ( lhs.type < rhs.type );
  
            // 1) Type sort
            if( lhs.type < rhs.type )   return true;
            else if( lhs.type > rhs.type )  return false;
  
           // 2) SubType sort
           if( lhs.subType < rhs.subType )  return true;
           else if( lhs.subType > rhs.subType ) return false;
  
           // 3) Option sort
           if( lhs.option < rhs.option )  return true;
           else if( lhs.option > rhs.option ) return false;
    
           return false;
      }
};

...

std::list<ITEMSORT> sortItemList;
ITEMSORT itemCond;

// item information data read
for( int i = 0; i < MAX_INVEN_SLOT; ++i )
{
     if( !ReadItem( itemCond, page, i ) )     return false;

     sortItemList.push_back( itemCond );
}

// sorting
sortItemList.sort( lt_ITEMSORTBASE() );

// sorting item information data output
for( int i = 0; i < MAX_INVEN_SLOT; ++i )
{
     const ITEMSORT &sortItemCond= sortItemList.front();
     if( !SetItem( i, sortItemCond) )
     {
          printf( "FAIL. sorting item input error. item index(%d) \n", sortItemCond.index );
     }

     sortItemList.pop_front();
}

...



※ sortItemList.sort( lt_ITEMSORTBASE() );

function struct 구조체를 만들어 해당 조건을 만든 후 std::list 의 sort() 인자에 넣으면 설정한 function struct의 조건으로 정렬 한후 해당 결과를 출력 하면 된다.

Posted by Mister_Q