일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 윈윈전략
- 상호링크
- 카일레라서버
- 보드게임
- 홀뎀
- 포커게임
- 포커
- 판매
- 티스토리 초대장
- 틀린그림 찾기
- 프로그램 개발
- 맞고게임
- 영어단어
- 게임 외주
- 써치아이
- 틀린그림찾기
- 고스톱
- 옥션소송
- 맞고
- 온라인게임
- 프로그램 외주
- Mame32
- 옥션해킹
- 서치아이
- 게임 개발
- holdem
- MAME
- 영어단어게임
- 카일레라
- 윈윈
- Today
- Total
kyuseo의 게임 프로그래밍
QSortCArray :: CArray 를 qsort 함수로 정렬하기 본문
개요.. |
MFC 자료구조용 템플릿 클래스인 CArray는 정렬에서 불편함을 느끼게 됩니다. C++ 표준 함수인 qsort 함수를 이용하기도 어렵고, 자체로는 알고리즘은 제공되지 않으니 qsort 함수와 CArray클래스를 활용하여 하나의 함수로 정렬을 구현을 해 보았습니다. ( STL 의 vector과 같이 쉽게 정렬할 수 있으면 좋으련만…)
코드 |
다음은 CArray 를 qsort 함수를 이용하여 쉽게 정렬하는 템플릿입니다.
#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 ); } } |