#include<algorithm> sort

https://blockdmask.tistory.com/178

 

[C++] sort algorithm 정리 및 예시

안녕하세요 BlockDMask 입니다. 오늘은 C++ STL 에서 제공하는 알고리즘 중에 sort 알고리즘에 대해 알아보겠습니다. 0. sort algorithm sort 알고리즘은 헤더파일에 속해있습니다. sort(start, end)..

blockdmask.tistory.com

https://hongku.tistory.com/153

 

C++ :: STL sort() 함수 다루기, 오름차순 내림차순, 학생 점수 순서대로 나열하기

STL sort() 함수 정렬을 만들어서 사용할 수 는 있지만, 매번 만들어서 사용하기는 번거롭다. 이럴때, 'alforithm' 을 include해서 그안에 있는 sort() 함수를 사용하면 된다. 1. sort() 함수를 이용한 오름차순과..

hongku.tistory.com

 

#include<queue> sort (priority_queue)

https://koosaga.com/9

 

STL priority queue 활용법

모든 nlgn들의 영웅(?) 같은 priority_queue 존재 그 자체로 멋지지만 정말 멋지게 쓰기 위해서는 제대로 활용할 줄 알아야 할 것이다. 1. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1..

koosaga.com

 

차이점

1.

  • #include <algorithm> : sort에서는 greater가 내림차순
  • #include <queue> : priority_queue의 sort에서는 greater가 오름차순

2.

  • #include <algorithm> : sort에서는 1번의 greater를 사용시에 greater<int>()와 같이 사용
  • #include <queue> : priority_queue의 sort에서는 1번의 greater를 사용시에 gerater<int>와 같이 사용

3. 

  • #include <algorithm> : sort에서는 cmp 함수를 만들때 인자의 왼쪽이 기준
  • #include <queue> : priority_queue의 sort에서는 cmp 함수를 만들때 인자의 오른쪽이 기준

 

추천방법

1. #include <algorithm> : 비교함수 cmp를 만들어서 사용

2. #include <algorithm> : greater<type>() 사용 -> 구조체는 1번, 어떤 원소를 비교할지 몰라 에러 발생

 

bool cmp(pair<intstring> v1, pair<intstring> v2)
{
    if(v1.first == v2.first)
    {
         sort는 왼쪽이 기준이기 때문에 second 오름차순 정렬 
        return v1.second < v2.second;
    }
    else
    {
         sort는 왼쪽이 기준이기 때문에 first 오름차순 정렬     
        return v1.first < v2.first;    
    }
}
vector<pair<intstring>> v;
sort(v.begin(), v.end(), cmp); 
 
 
sort(v.begin(), v.end()); // 오름차순
sort(v.begin(), v.end(), greater<int>()); // 내림차순
cs

 

3. #include <queue> : 클래스 cmp에 oeprator()를 만들어서 사용

4. #include <queue> : less<type>, greater<type> 사용

 

//struct cmp 
class cmp
{
    public:
        bool operator()(pair<intint> pq1, pair<intint> pq2)
        {
            if(pq1.first == pq2.first)
            {
                // priority_queue는 오른쪽이 기준이기 때문에 second 오름차순 정렬 
                return pq1.second > pq2.second;
            }
            else
            {
                // priority_queue는 오른쪽이 기준이기 때문에 first 오름차순 정렬     
                return pq1.first > pq2.first;   
            }
        }
};    
priority_queue<pair<intint>vector<pair<intint>>, cmp> pq;
 
 
// 일반적인 사용법도 추천
priority_queue<pair<intint>vector<pair<intint>>, less<pair<intint>>> pq;
priority_queue<pair<intint>vector<pair<intint>>, greater<pair<intint>>> pq;
cs

 

 

 

+ Recent posts