관리자 글쓰기
STL 알고리즘
2024. 7. 29. 15:33 - pingu-s

count() 함수로 횟수 세기

 

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

using namespace std;

int main() {
  vector<int> v = {1, 4, 3, 4, 5, 4, 5};

  // 5라는 값이 벡터 v에 몇 번 나타나는지 세기
  int ret = count(v.begin(), v.end(), 5);

  cout << ret << endl; // 2

  return 0;
}

 

sort() 함수로 정렬하기

 

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

using namespace std;

int main() {
  vector<int> v = {4, 2, 5, 3, 1};

  // 벡터 v를 오름차순으로 정렬
  sort(v.begin(), v.end());
  // v의 상태 : 1 2 3 4 5
  
  // 벡터 v를 내림차순으로 정렬
  sort(v.rbegin(), v.rend());
  // v의 상태 : 5 4 3 2 1

  return 0;
}

 

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

using namespace std;

struct Point {
  int x, y;
  
  Point(int x, int y) : x(x), y(y) {}
};

// 사용자 정의 비교 함수
bool compare(const Point &a, const Point &b) {
  if (a.x == b.x) {
    return a.y < b.y; // x 좌표가 같으면 y 좌표가 작은 순서대로 정렬
  }
  return a.x < b.x; // x 좌표가 작은 순서대로 정렬
}

int main() {
  vector<Point> points = {{3, 4}, {1, 2}, {3, 1}, {2, 5}};

  // points 벡터를 사용자 정의 기준으로 정렬
  sort(points.begin(), points.end(), compare);

  // 정렬된 벡터 출력
  for (const Point &p : points) {
    cout << "(" << p.x << ", " << p.y << ") ";
  }
  cout << endl;
  // 출력값: (1, 2) (2, 5) (3, 1) (3, 4)
  
  return 0;
}

 

next_permutation() 함수로 순열 생성하기

 

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

using namespace std;

int main() {
  vector<int> v = {1, 2, 3};
  // 모든 가능한 순열 출력
  do {
    for (int i : v) {
      cout << i << " ";
    }
    cout << endl;
  } while (next_permutation(v.begin(), v.end()));

  return 0;
}
/*
출력값: 
1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 
*/

 

unique() 함수로 중복 정리하기

 

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

using namespace std;

int main() {
  vector<int> v = {1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5};

  // unique 함수를 사용하여 중복 요소 제거
  auto newEnd = unique(v.begin(), v.end());

  // 중복되지 않는 요소들만 출력
  for (auto it = v.begin(); it != newEnd; ++it) {
    cout << *it << " ";
  }
  cout << endl;
  // 1 2 3 4 5

  // 벡터의 크기 출력
  cout << v.size() << endl; // 11

  // 전체 원소 출력
  for (auto it = v.begin(); it != v.end(); ++ it) {
    cout << *it << " ";
  }
  cout << endl;
  // 1 2 3 4 5 3 4 4 5 5 5

  return 0;
}

 

binary_search() 함수로 이진 탐색하기

* 정렬된 상태에서만 사용 가능

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

using namespace std;

int main() {
  vector<int> v = {1, 2, 3, 4, 5};

  cout << binary_search(v.begin(), v.end(), 3) << endl; // 1
  cout << binary_search(v.begin(), v.end(), 7) << endl; // 0

  return 0;
}

 

max_element(), min_element() 함수로 최댓값, 최솟값 위치 구하기

 

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

using namespace std;

int main() {
  vector<int> v = {1, 3, 5, 7, 2, 4, 6};

  auto maxIt = max_element(v.begin(), v.end());
  auto minIt = min_element(v.begin(), v.end());

  cout << *maxIt << endl; // 7
  cout << *minIt << endl; // 1

  return 0;
}

 

'개발 > C++' 카테고리의 다른 글

스택  (2) 2024.10.28
배열  (0) 2024.07.30
STL 컨테이너  (0) 2024.07.29
문법 정리  (0) 2024.07.25
배열, 리스트, 벡터  (1) 2024.04.30