// CArray 를 qsort 함수를 이용하여 쉽게 정렬하는 템플릿입니다.
// 핵심은 QSortCArray() 입니다.

#include "afxtempl.h"

// CArray 정렬 템플릿 함수

template<class T>
void QSortCArray( T& t, int (__cdecl *compare )(const void *elem1, const void *elem2 ) )
{
  if( t.GetSize() <= 0 )
  {
    return;
  }
 
  qsort( t.GetData(), t.GetSize(), sizeof( t[0] ), compare );
}


// int 자료형 비교 함수
int CompareInt( const void *elem1, const void *elem2 )
{
  int* p1 = (int*) elem1;
  int* p2 = (int*) elem2;
 
  if( *p1 > *p2 ) return +1;
  if( *p1 < *p2 ) return -1;
 
  return 0;
}

// CPoint 자료형 비교 함수
int ComparePoint( const void *elem1, const void *elem2 )
{
  CPoint* p1 = (CPoint*) elem1;
  CPoint* p2 = (CPoint*) elem2;
 
  if( p1->x > p2->x ) return +1;
  if( p1->x < p2->x ) return -1;
 
  return 0;
}


// qsort 시험
void test_qsort_carray()
{
  // int 자료형 정렬 테스트             
  CArray< int, int > a;
 
  a.Add( 9 );
  a.Add( 1 );
  a.Add( 3 );
  a.Add( 6 );
  a.Add( 8 );
 
  QSortCArray( a, CompareInt );
 
  for( int i=0; i<a.GetSize(); i++ )
  {
    TRACE( "%s:%d Value1 = %d \n", __FILE__, __LINE__, a[i] );
  }
 
  // CPoint 자료형 정렬 테스트       
  CArray< CPoint, CPoint > b;
 
  b.Add( CPoint( 4, 6 ) );
  b.Add( CPoint( 3, 5 ) );
  b.Add( CPoint( 7, 7 ) );
  b.Add( CPoint( 1, 8 ) );
  b.Add( CPoint( 9, 2 ) );
 
  QSortCArray( b, ComparePoint );
 
  for( i=0; i<b.GetSize(); i++ )
  {
    TRACE( "%s:%d Value1 = (%d,%d) \n", __FILE__, __LINE__, b[i].x, b[i].y );
  }
}


출처 : kyuseo
 
2006/07/25 10:27 2006/07/25 10:27

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요