Programming/MFC(C++)
[MFC] 람다 표현으로 CArray 정렬하기
Zadd
2018. 10. 22. 17:25
Visual Studio 2012
비주얼 스튜디오 2010부터 람다 함수를 지원한다.(C++11 기준)
MFC를 사용하면서 CArray나 CStringArray를 사용하게 되었는데,
정렬 기능을 지원하지 않기에 검색한 내용을 바탕으로 작성하였다.
1. 람다 함수
- 간단하게 표현하면 아래와 같다. 자세한건 검색으로 찾아보자.
[변수 캡쳐] (받을 인자)-> 리턴타입{함수}(넘길인자)
2. CArray 사용하기
- 우선 CArray를 사용하기 위해선 아래와 헤더를 선언하여야한다.
// ... #include <afxtempl.h> // ...
- CArray도 선언하자.
// ... CArray<int> arr; // ...
3. 람다 함수를 사용하여 정렬하기
// ... CArray<int> arr; arr.Add(10); arr.Add(5); arr.Add(7); arr.Add(3); // ... bool bAscending = true; // ... std::sort( arr.GetData(), // position of first element arr.GetData() + arr.GetSize(), // position one past the final element
[bAscending] // lambda introducer (const int& left, const int& right) // lambda formal parameters list { return bAscending ? (left < right) : (left > right); }// lambda body ); // ...
- 위와 같이 하게 되면 오름차순으로 정렬이 될 것이다. arr.GetCount()를 활용하여 배열의 개수를 구하고, arr.GetAt(int index)를 활용하여 값을 나열해보면 정렬 완료!
- MFC 배열의 다른 타입들도 위의 함수를 활용하여 정렬 가능하다.(CStringArray, CUIntArray 등)