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
를 통해 정렬 기준을 정할 수 있다.
평균적으로 으로 실행되며 여기서 N = std::distance(first, last)
으로 정의된다.
원래 순서를 유지한다고 보장할 수 없다.
list
의 경우 forward iterator이기 때문에 std::sort()
를 사용해 정렬을 수행할 수 없다.
Parameters | Description |
---|---|
first | 정렬을 수행할 범위의 첫번째 random-access iterator 범위에 포함된다. |
last | 정렬을 수행할 범위의 마지막 ramdom-access iterator 범위에 포함되지 않는다. |
comp | 인자 두 개를 받는 비교 함수로bool 값을 반환한다.인수를 수정하지 않으며, 함수 포인터 또는 함수 객체일 수 있다. |
comp
함수의 원형을 아래와 같은 형태를 취해야 한다.
bool cmp(cont Type &a, const Type &b);
없음
#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;
}
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