반응형
문제를 풀 때 마다 검색하는 것 같아서 한 번 정리한다.
벡터 정렬하기
오름차순 정렬
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
v.push_back(3);
v.push_back(1);
v.push_back(6);
v.push_back(1);
v.push_back(2);
v.push_back(5);
v.push_back(4);
v.push_back(2);
sort(v.begin(), v.end());
for(int i : v) cout << i << ' ';
}
만약 벡터가 아닌 크기 10의 배열인 arr을 정렬하고 싶다면 v.begin() 대신 arr, v.end() 대신 arr + 10 을 넣어주면 된다.
정렬 기준 바꾸기
bool compare(자료형 a, 자료형 b){
return 원하는 조건문;
}
bool형을 리턴하는 사용자 정의 함수를 만들어서 sort 함수의 인자로 넣어주면 정렬 기준을 변경할 수 있다.
- ex) 내림차순 정렬
bool compare(int &x, int &y){
return x > y;
}
- ex) 문자열 길이 순 정렬, 길이 같을 때는 사전식 정렬
bool compare(string &x, string &y){
if(x.length() == y.length()){
return x < y;
}
else{
return x.length() < y.length();
}
}
벡터 중복 제거
sort, unique, erase 함수를 활용하여 중복 제거를 할 수 있다.
unique 함수는 연속된 중복 원소를 벡터의 가장 뒷부분으로 보내버리는 함수이다.
따라서 unique함수를 실행하기 전에 sort를 통해 정렬되어 있어야하고 unique 실행 후에는 erase를 통해
뒷 부분을 삭제해주어야한다.
sort(v.begin(), v.end(), compare);
v.erase(unique(v.begin(), v.end()), v.end());
unique 함수의 실행이 끝나고 리턴하는 값은 벡터의 첫 번째 쓰레기 값의 주소이다.
따라서 위와 같이 erase 함수의 시작 인자로 unique 함수 자체를 넣어줄 수 있다.
반응형
'C, C++ & Linux > C++' 카테고리의 다른 글
[C++] STL - next_permutation (0) | 2022.08.01 |
---|---|
[C++] STL - pair, tuple (1) | 2022.07.01 |
[C++] STL - list (0) | 2022.06.29 |
[C++] STL - deque (0) | 2022.06.29 |
[C++] STL - vector (0) | 2022.06.29 |