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;
}