티스토리 뷰

 이번에도 MFC 프로그램을 다루면서 진행하게된 내용입니다. 🥶 정렬을 다시 해주어야하는데 단순히 숫자나 문자비교가 아니라 자기만의 기준으로 정렬을 해야할 때가 있을 수 있습니다. 그 방법을 공유해보록 하겠습니다.

#include <algorithm>

 먼저 벡터정렬을 해주기 위해 algorithm을 포함시켜 줍니다.

// 사용할 벡터의 자료형 예시
typedef struct __ReindexData {
	int vsIndex;
	int row; 
	int col; 
	int orderNum; 
	int realIndex;
	int orderIndex;
} ReindexData;

// 비교에 사용할 함수 정의 예시
bool compare(ReindexData a, ReindexData b)
{
	if (a.col == b.col) {
		return a.row < b.row;
	}
	else {
		return a.col < b.col;
	}
}

void main(){
	ReindexData reIndexData;
    vector<ReindexData> vReindexDatas;
    // 필요한 처리 ...
    
    // 정렬
    std::sort(vReindexDatas.begin(), vReindexDatas.end(), compare);
    
}


 이후 코드 입니다.

 먼저 사용할 벡터의 자료형 예시로 사용자가 직접 정의해준 구조체 테이터입니다. 클래스도 가능합니다. ✌

 이후 비교에 사용할 함수를 정의해줍니다. bool을 반환하고 vector가 사용하는 자료형을 인자로 2개 받아주면됩니다. 예시에 쓰인 코드의 내용은 col이 같다면 row를 비교해서 오름차 순으로 정렬하고, 아니면 col을 비교해서 오름차순으로 정렬하게 됩니다. 😃 내림차로 해야할 경우 부등호를 반대방향으로 바꿔주시고, 기타 추가 처리할 사항이 있으면 처리해주면 됩니다.

 그리고서 실행 코드에서 필요한 처리를 해주고 std::sort를 사용해서 정렬을 하게됩니다. 정렬은 단순하게 vector의 begin()과 end()를 주면됩니다. 👏 이때는 vector전체를 정렬시키는 것이고 특정 범위만 정렬을 하고싶다면 해당 이터레이터를 넘겨주면 되겠습니다. 이렇게 간단하게 정렬하는 방법을 알아보았습니다. 😎 감사합니다.

👉[MFC] cpp 기본적인 문법들 보충

👉[MFC] Template (템플릿) cpp 중요 문법

👉[MFC] Worker Thread (워커 쓰레드)

댓글
댓글쓰기 폼
네이버 이웃추가
«   2020/12   »
    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    
글 보관함