MFC vector<struct> 정렬

 
Introduction

vector를 이용하면서 정렬이 필요한 경우가 있습니다. 여러가지를 이용할 수 있지만, 제목에 맞춰 vector를 이용하여 정렬하는 방법에 대해 정리하도록 하겠습니다.  간단한 내용이기 때문에 코드와 약간의 설명만 추가하여 넘어가도록 하겠습니다. 
  이후 필요한 자료가 있을 경우, 포스팅에 추가 혹은 블로그에 업로드 하도록 하겠습니다. 
 
 
vector<struct> 형태 정렬 방법

 
#구조체 정의
 
typedef struct _monitorArg {
       int index;
       int left;
       _monitorArg(int i, int _n){
              index = i;
              left = _n;
       }
}ST_MONITORARG;
 
구조체는 index, left 값을 가지고 있습니다. 이때, left의 값을 이용하여 정렬(오름/내림)하고 싶을 때 다음과 같이 수행하시면 됩니다. 
 
 
#vector 정렬 추가 함수(올림차순)
 
bool sortData(const ST_MONITORARG& a, const ST_MONITORARG& b)
{
       if (a.left < b.left)
              return true;
       else
              return false;
}
 
입력 파라미터로 구조체를 넣어주고, a,b 값의 left를 비교하여 true/false 값을 전달 합니다. 
내림차순으로 변경하고 싶으시면 if문의 부호를 반대로 변경해주시면 됩니다. 
그럼 정렬하는 코드를 살펴볼까요? 
 
#정렬 수행 함수
 
void StructSort()
{       
       vector<ST_MONITORARG> mList;
       mList.clear();
       for (int i = 0; i < (int)m_monitorinfoList.size(); i++) {            
              mList.push_back(ST_MONITORARG(i, m_monitorinfoList[i].rect.left));
       }
       sort(mList.begin(), mList.end(), sortData);
}
 
먼저 mList 구조체에 값을 넣어 초기화를 합니다. 그리고 앞서 정의한 sort() 함수를 이용하면 다음과 같이 정렬 됩니다. 
 
 
간단한 문제인데, 종종 쓰이게 됩니다. 한글을 이용하여 정렬을 한다던가, 혹은 기타 여러가지 자료들을 이용하여 정렬 가능합니다. 
 
 
 
 
 
 

이 글을 공유하기

댓글(0)

Designed by JB FACTORY