문법

    [C++] algorithm STL의 sort()와 queue STL의 priority_queue의 정렬 방식의 차이 - less와 greater

    Sort() - algorithm STL less : 오름차순 greater : 내림차순 priority_queue - queue STL less : 내림차순 greater : 오름차순

    [C++] priority_queue STL 비교 구조체 comparator 사용하기

    [C++] priority_queue STL 비교 구조체 comparator 사용하기

    algorithm STL에 있는 sort() 메서드를 사용할 때에는, 그냥 bool형 비교 메서드 하나만 만들어주면 됐었다. queue STL에 있는 priority_queue를 사용할 때에는 less()를 써서 내름차순으로 만들거나 greater()를 써서 오림차순으로 만들 수 있다. 그러나 class 형식으로 만들어서 쓰고싶을 때에는 구조체를 만들어서 그 안에 bool형 operator()(A, B)의 형태의 메서드를 만들어 주어야 한다. bool 메서드는 return true일 때 앞 뒤를 바꾼다고 생각하면 된다. 따라서 위처럼 만들 경우 p1의 시간, type에 따라 오름차순으로 정렬된다고 생각하면 된다. pq 선언은 다음처럼 해주면 된다.

    [C++] Comparator 사용시 주의사항

    [C++] Comparator 사용시 주의사항

    10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 위 문제를 풀면서 조금 헷갈리는 것이 있어서 메모기록용 글. 매개변수에서 앞에 있는 애가 배열의 앞 부분이고 뒤에 있는 애가 배열의 뒷 부분이라 생각하면 된다. 즉, 앞 뒤 라면 내림차순이다.

    <algorithm> STL에서 sort의 comparator 작성 시, invalid comparator 문제

    <algorithm> STL에서 sort의 comparator 작성 시, invalid comparator 문제

    1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 백준에서 해당 문제를 푸는데 문자열을 그냥 정렬하는 문제였다. 근데 sort에서 자꾸 invalid comparator문제가 발생해서 알아보았다. Sort 메서드에서 comparator로 들어오는 매개함수는 반드시 Strict Weak Ordering을 만족해야 한다. 이게 무슨말이냐면, A == B일 경우에는 A B도 false여야 한다는 말이다. 위처럼 comparator를 작성해서 사용했는데, 이 코드에서는 str1..

    [C++] std::sort 오름차순 내림차순 정렬

    [C++] std::sort 오름차순 내림차순 정렬

    greater와 less를 사용한다. int형 vector를 정렬할 때는 오름차순 : sort(vec.begin(), vec.end(), less()); 내림차순 : sort(vec.begin(), vec.end(), greater()); priority_queue 선언할 때와는 다르게 끝에 () 괄호도 추가해야 한다.

    [C++] 벡터 사용 시, () 선언과 [] 선언의 차이

    [C++] 벡터 사용 시, () 선언과 [] 선언의 차이

    vector 선언 시 []괄호와 ()괄호의 차이가 있다. []괄호로 선언시, 텅 빈 이차원 배열이라고 생각하면 된다. 각 벡터의 인덱스마다 동적으로 크기를 할당할 수 있다. ()괄호로 선언시, 처음에 그 공간들을 만든 후에 동적으로 크기를 늘릴 수 있다. 예시로 확인해 보자면 []괄호로 벡터 선언시, []괄호로 선언 시에는 배열의 높이에는 제한을 두고, 각 층마다는 동적으로 크기를 할당하겠다는 뜻이다. 위 코드는 벡터의 인덱스를 넘었으므로 에러가 나게 된다. 출력을 안해서 에러가 안나 보일 수 있겠지만 비정상적으로 종료된 것을 커맨드에서 확인할 수 있다. ()괄호로 벡터 선언시, 이 코드에서는 처음에 선언한 1001의 크기를 벗어났다. 하지만 처음 선언한 1001의 크기는 사실 큰 의미는 없다. 1001..