// 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
// 핵심은 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
덧글을 달아 주세요