반응형
sort
#include <vector>
#include <algorithm>
vector<int> v;
v.push_back(4);
v.push_back(3);
v.push_back(2);
v.push_back(1);
sort(v.begin(),v.end()); // 내림 차순 정렬
sort(v.begin(),v.end(),greater<int>()); // 오름차순 정렬
혹은 직접 함수를 만들어 정렬 조건을 다르게 만들 수 있음
bool cmp(int a, int b){
return a>b;
}
sort(v.begin(),v.end(), cmp); // 오름차순 정렬
이게 a가 b보다 크면 true를 반환 아니면 false를 반환. 값이 true면 a를 선택
find
#include <vector>
#include <algorithm>
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
cout << find(a.begin(),a.end(),3) - a.begin(); // 시작점을 꼭 빼기!
- 결과 : 찾은 값의 인덱스를 반환 -> 2 반환
find(start,end) 범위 [start,end) end를 포함하지 않음
find는 범위 안에서 값을 찾아서 iterator를 리턴하기 때문에 시작점을 빼주어야 찾고자 하는 인덱스가 리턴됨
erase
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.erase(a.begin(), a.end());
- 결과 : 1234 다 지워짐
erase(start, end) 여기서 범위는 [start, end) end를 포함하지 않음 (주의)
만약 3만 지우고 싶다면 erase(a.begin()+2, a.begin()+3)
여기서 3을 지운후 capacity는 그대로이고 뒤에 원소들을 앞으로 옮겨 size만 줄어듬.
응용해서 자신이 원하는 값을 찾아 지우고 싶은 경우는
int idx = find(a.begin(),a.end()) - a.begin();
a.erase(a.begin()+idx,a.begin()+dix+1);
- 이런식으로 find와 결합하여 원하는 원소를 찾아 제거 가능
unique
sort(a.begin(), a.end()); // 정렬을 해주어야 함
unique(a.begin(),a.end()); // 중복값을 맨뒤로 보내고 그 중복값이 시작하는 iterator 반환
//중복값을 제거 하기위해서는 earse와 결합
a.erase(unique(a.begin(),a.end()), a.end());
// 중복값을 맨뒤로 보내고 그 중복값 시작부터 끝까지 지워주면됨
- 모든 중복된 값을 정리하기 위해서는 sort를 하고 unique를 이용하자!
lower_bound, upper_bound
lower_bound(a.begin(),a.end(), 3) - a.begin();
upper_bound(a.begin(),a.end(), 3) - a.begin();
- lower은 배열에서 자신이 찾고 싶은 값 이상이 처음으로 나오는 원소의 주소를 반환
리턴값은 iterator이기 때문에 -a.begin()을 해주어야 인덱스 값을 얻을 수 있다.
모두 작다면 a.end() 리턴
ex) a가 1224 입력값 3이라면 3이 나온다. - upper는 배열에서 자신이 찾고 싶은 값을 처음으로 초과하는 원소의 주소를 반환
마찬가지로 리턴값은 iterator이기 때문에 -a.begin()을 해주어야 인덱스 값을 얻을 수 있다.
모두 작거나 같으면 a.end() 리턴
ex) a가 12234 입력값 3이라면 4가 나온다. - lower, upper_bound는 이분탐색을 이용하기 때문에 정렬된 배열에서 사용해야 한다. (주의)
반응형
'언어 > C++' 카테고리의 다른 글
[C++] set, multiset 간단 사용법 (0) | 2022.04.05 |
---|---|
c++ 우선순위 큐 priority_queue 사용법 [컴공과고씨] (1) | 2022.04.04 |
C++ 비트 마스킹 (비트 연산) [컴공과고씨] (0) | 2022.04.03 |