[STL] Algorithm

윤정민·2023년 1월 1일
0

C++

목록 보기
4/46

Algorithm

STL algorithm 라이브러리는 STL 자료구조를 다루는데 필요한 편리한 메소드들을 제고하고 있다. STL 알고리즘 라이브러리에 있는 함수들은 대체로 다음과 같은 두 가지 형태를 띄고 있다.

1. 정렬

  • vector와 deque만 가능

1.1. sort

  • 일반적인 정렬

  • 예시

    • 기본적으로 오름차순 정렬
    sort(vec.begin(), vec.end());
    • Functor을 사용해 정렬 방식 변경
    struct int_compare
    {
      bool operator()(const int& a, const int& b)const {return a>b};
    }
    sort(vec .begin(),vec.end(), int_compare());
    • funtional 헤더를 사용한 정렬방식 변경
    sort(vec.begin(), vec.end(), greater<int>());

1.2. stable_sort

  • 원소들 간의 순서를 보존한채 정렬
    • sort보다 조금 느림

1.3. partial_sort

  • 배열의 일정부분만 정렬
    • 모두 정렬하는 것 보단 빠르기 때문에 상위또는 하위 몇개의 원소가 필요할 때 사용
    // 정렬 전: 5 3 1 6 4 7 2
    partial_sort(vec.begin(), vec.begin()+3; vec.end());
    // 정렬 후: 1 2 3 6 5 7 4

2. count

  • 특정 원소의 개수를 return
    count(vec.begin(), vec.end(), 1);

3. find

  • 특정 원소의 첫번째 위치의 iterator를 return
    auto it = find(v.begin(), v.end(), 3);
    cout<< *it <<endl;

4. reverse

  • 해당 container에 있는 원소들의 위치를 역순으로 조정
    string str = "abc";
    reverse(str.begin(),str.end());

5. 크기 비교 반환

5.1. max

  • 두 값의 크기를 비교해 더 큰 값을 반환
    max(m, n);

5.2. min

  • 두 값의 크기를 비교해 더 작은 값을 반환
    min(m, n);

5.3. max_element

  • 컨테이너 내에서 가장 큰 원소의 위치의 iterator를 반환
    max_element(v.begin(), v.end());

5.3. min_element

  • 컨테이너 내에서 가장 작은 원소의 위치의 iterator를 반환
    min_element(v.begin(), v.end());

6. unique

  • 중복되는 원소들을 뒤로 보내며 함수를 정렬
  • 뒤로 밀려난 원소들의 시작 위치의 iterator를 반환
    unique(v.begin(), v.end());
    • 중복요소 제거 활용
      v.erase(unique(v.begin(), v.end()), v.end());
profile
그냥 하자

0개의 댓글