웹사이트 검색

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 질문.