숫자, 이름이 여러 섞여 있는 내용의 문자열에 대해 윈도우 탐색기와 같은 정렬을 기대하려면 Natural Sort 라는 정렬을 시행해야 합니다. Natural Sort 란 쉽게 말해서 인간이 하는 방식으로 영문자 숫자를 정렬하는 방식을 이야기 합니다. 파이썬에선 natsort 라는 라이브러리가 있어서 그냥 pip install 로 설치하고 사용하면 끝이였는데
C++에서는 당연하게도 직접 구현해야 합니다.
제목을 보시면 알겠지만 Natural Sort 구현하기가 아니라 '사용하기' 입니다. 깃허브에 이미 친절하게 구현을 해둔 분이 있어서 이걸 사용하시면 됩니다.
https://github.com/scopeInfinity/NaturalSort
Usage
깃허브에 가서 natural_sort.hpp 부분만 따로 다운로드 하거나 복사해서 프로젝트에 추가합니다.
이후 사용할 곳에서 #include "natural_sort.hpp" 로 추가를 해주시고
vector<string> v에 대해 요소 정렬을 원하시면
단순히 SI::natural::sort(v); 만 호출해주시면 natural sort로 정렬이 잘 됩니다.
이외 자세한 예제들은 natural_sort_test.cpp 에 적혀있는 듯 하니 이걸 보고 사용하시면 되겠습니다.
번외
기존에 C++ 프로그래밍을 하면서 헤더 파일을 C에서 쓰던 *.h라는 이름 그대로 사용했는데 이번에 *.hpp 라는 새로운 파일을 보게 되었습니다. 이게 뭐지? 했는데 컴파일러 입장이 아니라 인간이 보기에 이 헤더 파일이 C에서 사용하는지 C++ 에서 사용하는지 구분하기 위해 이름을 구분해서 적어주는 듯 합니다.
즉 C에선 *.h라는 이름의 헤더 파일로, C++에서는 *.hpp 라는 이름으로 작성하는 듯 합니다.
무조건 hpp로 적는게 좋은 거 같았는데 아래 글을 보니 또 아닌듯 합니다..?
C++에서는 *.h , *.hpp 모두 사용하니 이런게 있다 정도만 알아두면 될 듯 합니다..
https://psyminsu.tistory.com/2
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 모든 인자값을 레퍼런스로 넘겨야 성능상 유리할까? (0) | 2022.10.27 |
---|---|
[C/C++] 선언(Declaration)과 정의(Definition)의 차이 (0) | 2022.06.21 |
[C++] Visual Studio <std::filesystem> 사용하기 (2) | 2022.06.11 |
[C++] std_lib_facilities.h 헤더 파일 이란? (0) | 2022.04.02 |
[C++] while(cin) 으로 자료형이 올바른 값을 계속 입력 받기 (0) | 2022.04.01 |