이번에도 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전체를 정렬시키는 것이고 특정 범위만 정렬을 하고싶다면 해당 이터레이터를 넘겨주면 되겠습니다. 이렇게 간단하게 정렬하는 방법을 알아보았습니다. 😎 감사합니다.
'c언어 > c++' 카테고리의 다른 글
[c++] CStdioFile과 sscanf_s로 파일 읽어오기 (형식으로 불러오기) (0) | 2020.03.24 |
---|---|
[c++] 메모리활용, vector 동적배열 사용하기 등 (0) | 2019.07.04 |
[c++] 동적으로 배열 할당하여 사용하기 (new, 포인터) (0) | 2019.07.03 |
[STL] Template, 시퀀스 사용 등 (0) | 2019.07.02 |
[c++/cpp] 연산자 오버로딩, 복사생성자, 템플릿(T) 등 (0) | 2019.07.01 |