compare 함수 그리고, comparity 문제

phoenixKim·2021년 7월 26일
0

알고리즘 기법

목록 보기
51/72

최근 추가사항

  • 백준 19942번. 다이어트 문제에서 정렬하는 방법에 대해서
    == 일 경우에 대해서 설명 추가하자. invalid comparity?

https://velog.io/@kwt0124/%EB%8B%A4%EC%9D%B4%EC%96%B4%ED%8A%B8

compare...

== 비교할 때 설명

== 비교를 해야할 때는 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++의 내용을 참고했습니다.

  • 기준은 매개변수 중 가장 첫번째값이다.

1. 내림차순으로 정렬하기


-> 함수를 보면 앞으로 갈수록 커진다는 느낌이다.
: a가 b보다 앞서있는 상태에서 큰 것이므로 내림차순이다.

2. 오름차순으로 정렬하기


-> 함수를 보면 뒤로 갈수록 커진다는 느낌이다.

3. 변수가 3개일 경우에 정렬시키기

pair<string, pait<int,int>> 이러한 선언을 활용한다.

관련 알고리즘 문제
: 프로그래머스 - 실패율

4. 2차원 벡터를 정렬할때는...

greater나 less 사용하지 말고 따로 함수를 만들어야 한다.

2가지 방법이있다.

가. 전역 함수 만들기

  • 내림차순

  • 오름차순

나. class의 operator함수 만들기

  • 내림차순

  • 오름차순

관련 소스코드

#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();
	}
}


profile
🔥🔥🔥

0개의 댓글

관련 채용 정보