[C++] 정렬하기 std::sort()

bolee·2022년 12월 3일
0

C++

목록 보기
10/16
post-thumbnail

std::sort()

#include <algorithm>


template <class RandomAccessIterator>  void sort(RandomAccessIterator first, RandomAccessIterator last); // default (1)

template <class RandomAccessIterator, class Compare>  void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); // custom (2)

범위 내의 요소들을 정렬하는 함수이다.
기본적으로 오름차순(asceding)으로 정렬하며, comp를 통해 정렬 기준을 정할 수 있다.
평균적으로 O(NlogN)O(NlogN)으로 실행되며 여기서 N = std::distance(first, last)으로 정의된다.

원래 순서를 유지한다고 보장할 수 없다.
list의 경우 forward iterator이기 때문에 std::sort()를 사용해 정렬을 수행할 수 없다.

Parameters

ParametersDescription
first정렬을 수행할 범위의 첫번째 random-access iterator
범위에 포함된다.
last정렬을 수행할 범위의 마지막 ramdom-access iterator
범위에 포함되지 않는다.
comp인자 두 개를 받는 비교 함수로bool 값을 반환한다.
인수를 수정하지 않으며, 함수 포인터 또는 함수 객체일 수 있다.

comp 함수의 원형을 아래와 같은 형태를 취해야 한다.

bool cmp(cont Type &a, const Type &b);

Return value

없음


Example

#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33
  
  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33
  
  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
  
  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

Output

myvector contains: 32 71 12 45 26 80 53 33
myvector contains: 12 32 45 71 26 80 53 33
myvector contains: 12 32 45 71 26 33 53 80
myvector contains: 12 26 32 33 45 53 71 80

참고 자료

0개의 댓글