https://velog.io/@kwt0124/%EB%8B%A4%EC%9D%B4%EC%96%B4%ED%8A%B8
백준 결과 : 8% 또는 40% 에서 틀림 발생함.
백준 결과 : 맞음 처리되는 compare 함수
strict weak ordering?
https://panty.run/strict-weak-ordering/
https://velog.io/@dlsghl92/Strict-Weak-Ordering
== 비교를 해야할 때는 false를 반환해야 함.
-> 뭐지??
https://www.acmicpc.net/board/view/28025
그래?? false 로 변경해보자.
-> 이상 없음. 이때는 오름차순.
이때는 내림차순
그냥 이렇게 하는게 안전하지만 ,불가피 하게 동일한 경우일때
처리할 경우에 생각을 해봐야 함.
결론
: a vs b 에서 어떤 원소가 동일할 경우,
다른 거를 비교해야 한다고 할때 , 무턱대로 return true, false;
로 반환 하면 안됨. == 안에서 비교되는 원소를 비교 반환 시키자.
ex) a.data vs b.data
if(a.data == b.data)
return a.value1 < b.value1 이러한 방법으로 리턴하자.
나동빈님과 씹어먹는 c++의 내용을 참고했습니다.
기준은 매개변수 중 가장 첫번째값이다.
-> 함수를 보면 앞으로 갈수록 커진다는 느낌이다.
: a가 b보다 앞서있는 상태에서 큰 것이므로 내림차순이다.
-> 함수를 보면 뒤로 갈수록 커진다는 느낌이다.
pair<string, pait<int,int>> 이러한 선언을 활용한다.
관련 알고리즘 문제
: 프로그래머스 - 실패율
greater나 less 사용하지 말고 따로 함수를 만들어야 한다.
2가지 방법이있다.
내림차순
오름차순
내림차순
오름차순
#include <algorithm>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
bool check(int a, int b)
{
return a < b;
}
struct comp {
public :
bool operator()(int a, int b) {
return a < b;
}
};
int main()
{
vector<int>v = { 2,1,-1,88,17,5,-19 };
sort(v.begin(), v.end(), check);
cout << "sort를 이용한 정렬" << endl;
for (const auto i : v)
cout << i << endl;
cout << "우선순위 큐에서의 정렬" << endl;
priority_queue<int, vector<int>, comp>pq(v.begin(), v.end());
while (!pq.empty())
{
cout << pq.top() << endl;
pq.pop();
}
}