C++에서 벡터 정렬
소개
이 자습서에서는 C++에서 벡터 정렬에 중점을 둘 것입니다.
정렬은 모든 프로그래밍 언어에서 광범위하게 수행되는 작업 중 하나입니다. 마찬가지로 C++에도 데이터 구조를 정렬할 수 있는 몇 가지 알고리즘이 있습니다.
특히 벡터의 경우 모든 순서(오름차순 또는 내림차순)로 정렬 작업을 수행할 수 있습니다.
C++에서 벡터를 오름차순으로 정렬
C++의 벡터는 algorithm
헤더 파일에 정의된 sort()
함수를 사용하여 오름차순으로 쉽게 정렬할 수 있습니다.
sort()
함수는 주어진 데이터 구조를 정렬하고 아무 것도 반환하지 않습니다. 정렬은 전달된 두 반복자 또는 위치 사이에서 발생합니다. 세 번째 매개변수는 요소를 비교할 순서를 결정합니다.
기본적으로 세 번째 매개변수를 전달하지 않는 경우 함수는 이를 std::less
함수로 간주합니다. 이 함수는 첫 번째 인수가 다른 인수보다 작은지 여부에 따라 두 인수를 비교하여 true 또는 false를 반환합니다.
이제 C++에서 벡터를 정렬하는 방법(오름차순)을 살펴보겠습니다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec {5, 4, 3, 2, 1};
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
std::sort(vec.begin(),vec.end());//Sorting the vector
cout<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
return 0;
}
산출:
Before sorting vector : 5 4 3 2 1
After sorting vector : 1 2 3 4 5
내림차순으로 C++에서 벡터 정렬
앞에서 말했듯이 C++에서 sort()
함수의 세 번째 인수는 정렬 순서를 결정합니다. 따라서 원하는 순서(이 경우 내림차순)로 벡터를 정렬하는 함수를 정의할 수 있습니다.
1. sort()에서 greater() 사용
less
함수와 유사하게 greater
함수는 부울 값을 true 또는 false로 반환하지만 그 반대의 의미입니다. 첫 번째 인수가 두 번째 인수보다 크면 함수는 참을 반환하고 위의 조건이 거짓이면 거짓을 반환합니다.
이를 사용하여 내림차순으로 정렬된 벡터를 얻는 방법을 살펴보겠습니다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec { 2,4,6,8,10 };
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
std::sort(vec.begin(),vec.end(), greater<int>());//Sorting the vector using greater<int>() function
cout<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
return 0;
}
산출:
Before sorting vector : 2 4 6 8 10
After sorting vector : 10 8 6 4 2
2. sort()에서 람다 식 사용
C++11부터 C++ 프로그래밍에 람다 식 사용이 도입되었습니다. 이들은 선언이 필요하지 않거나 반환 유형을 지정하지 않아도 되는 간단한 한 줄 함수에 불과합니다.
따라서 우리는 sort()
함수로 정렬 순서를 결정하기 위해 정의된 람다 식을 사용할 수 있습니다. sort()
함수에 대한 세 번째 매개변수로 한 줄 표현식을 정의하면 됩니다. 어떻게 보자
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec { 11,22,33,44,55 };
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
std::sort(vec.begin(),vec.end(), [](int &a, int &b){ return a>b; });
//Sorting the vector using user-defined lambda expression(return type bool)
cout<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
return 0;
}
산출:
Before sorting vector : 11 22 33 44 55
After sorting vector : 55 44 33 22 11
여기서 a>b
표현식은 벡터에서 전달된 두 인수를 비교하는 데 사용됩니다. 위 코드의 출력에서 볼 수 있듯이 벡터는 원하는 대로 내림차순으로 정렬됩니다.
결론
따라서 이 기사에서는 C++에서 벡터를 오름차순 및 내림차순으로 정렬하는 방법에 대해 배웠습니다. 이 주제와 관련된 추가 질문이 있으면 아래 의견을 자유롭게 사용하십시오.
참조
- STL에서 정렬 - JournalDev 자습서,
- <알고리즘> - C++ 알고리즘 라이브러리,
- STL 벡터를 정렬하는 방법은 무엇입니까? - StackOverflow 질문,
- 내림차순으로 벡터 정렬 - StackOverflow 질문.