본문 바로가기

Language/C++

C++ 표준라이브러리 sort() 함수 사용하기

C++ 표준라이브러리 <alogrithm>해더에 선언 되어있는 sort 함수는 data를 정렬하는 기능을 갖는다. 하지만 이 sort를 사용하기 위해서는 vector를 사용하여야 한다.

vector 클레스는 템플릿 클레스로 간단하게 기능을 나타내면 다음과 같다.
Vector::vector<T>

vector<T>::size_type //가장 큰 vector에 들어가는 요소들의 최대 개수를 담을 수 있는 타입.

v.begin() // v의 첫 번째 요소를 나타내는 값을 리턴
v.end() // v의 (하나 지난) 마지막 요소를 나타내는 값을 리턴
vector<T> v;//타입 T 요소들을 담을 수 있는 빈 vector를 생성
v.push_back(e) //vector에 e로 초기화된 요소 하나를 추가한다.
v[i] // i위치에 저장된 값을 리턴
v.size() //v 에 들어있는 요소들의 개수를 리턴.

여기서 sort를 위한 기능은 v.begin()과 v.end() 함수 이다.

end함수는 마지막(하나 지난) 요소를 나타낸다.

algorithm 헤더에 정의되어 있는 sort 함수는 컨테이너에 들어 있는 값들을 재정렬하여 내림차순이 아닌 순서로 만든다. 여기서 순서라는 말을 사용하는 이유는 어떤 요소들은 다른 요소와 같은 값을 가질 수도 있기 때문이다.

srot(v.begin(),v.end();

로 사용된다.

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

void main()
{
 vector<int> a;
 int b = 0;

 for(int i = 0; i < 10; i++)
 {
  cin >> b;
  a.push_back(b);
 }


 sort(a.begin(),a.end());

 for(int i = 0; i < 10; i++)
  cout << a[i] << endl;
}

입력 : 1 2 5 7 3 5 6 4 9 8 
츨력 : 1 2 3 4 5 5 6 7 8 9

vector를 조금 더 설명하자면 vector는 객체가 입력한 정확한 크기만큼을 처음에 미리 할당하지 않고, 입력이 많아 짐에 따라 점차적으로 커짐에도 불구하고, 프로그램의 성능이 실제로는 매우 빠르다는 것이다. 

라이브러리의 구현시스템은 C++ 표준에서 요구하는 성능 요구사항을 만족시켜야 한다. 따라서 프로그램의 성능을 확신할 수 있게 된다. 라이브러리는 외형적인 명세 기준을 만족하는 것 뿐아니라, 상세히 정의된 성능 기준도 만족 시켜야 한다. 표준을 따르는 모든 C++ 구현시스템들은 다음 사항을 만족해야 한다.

-vector를 구현하되, 많은 수의 요소들의 vector에 추가해도 요소의 개수에 비례한 이상의 성능 저하가 나타나서는 않된다. 
-sort를 구현하되, nlog(n) 보다 느려서는 않된다. 이때, n은 정렬되는 요소들의 개수를 의미한다.

굳이 프로그래머가 따로 정의하여 사용하지 않아도 표준을 따르는 C++ 시스템은 성능면에서도 뒤지지 않는다는 말이다.