반응형

https://edukoi.tistory.com/88?category=841618

 

26. c++ 구조체 정렬하는 방법

구조체를 정렬하는 방법에 대해서 알아봅시다. sort 함수는 당연히 구조체를 정렬 할 수 있습니다. 일반적으로 c++에서 제공되는 데이터 형인 int, double의 경우는 별다른 함수를 제공하지 않고도 ��

edukoi.tistory.com

 

 

sort에 제공할 compare 함수 형태는 다음과 같습니다

bool compare (const 데이터형 a, const 데이터형 b)
{
    순서가 제대로인 경우 0이 아닌 값

    순서가 바뀐 경우는 0을 리턴해야 한다.
}

 

a와 b는 배열 내에서 앞에 있는 원소가 a, 뒤에 있는 원소가 b가 된다.

따라서, 두 원소의 값이 원하는 정렬 순서라면 0이 아닌 값을 리턴하도록 작성해야 하며,

원하는 순서가 아닌 경우는 0이 리턴되도록 해야 한다. 

 

bool compare(pair<int, char> a, pair<int, char> b)
{
    if (a.second == b.second)

    return a.first < b.first;

    else return a.second < b.second;

}

 

 

[ 실습 예제 1 ]

#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>

using namespace std;

bool compare(pair<int, char> a, pair<int, char> b)
{
    if(a.second == b.second)
    return a.first < b.first;
    else return a.second < b.second;
}

int main()
{
    int i;
    vector<int> a;
    a.push_back(3);
    a.push_back(1);
    a.push_back(9);
    a.push_back(5);
    a.push_back(2);
    
// 3가지 방법으로 정렬하였습니다 
// sort()명령어 한줄씩 실행시켜서 확인해보세요

    sort(a.begin(), a.end()); //오름차순
    
    //sort(a.begin(), a.end(), greater<int>()); //내림차순
    
    //sort(a.begin(), a.end(), less<int>());
  
  for(i=0;i<a.size(); i++)
    {
        cout << a[i] << ' ';
    }

    pair<int, char> t;
    t = make_pair(3, 'A');
    cout << t.first << ' ' << t.second << '\n';

    vector< pair<int, char> > v;
    t = make_pair(3, 'D');
    v.push_back(t);
    t = make_pair(6, 'A');
    v.push_back(t);
    t = make_pair(1, 'A');
    v.push_back(t);
    t = make_pair(2, 'Q');
    v.push_back(t);
    t = make_pair(5, 'D');
    v.push_back(t);
    
// 4가지 방법으로 정렬하였습니다  
// sort()명령어 한줄씩 실행시켜서 확인해보세요 

    sort(v.begin(), v.end());
    
    //sort(v.begin(), v.end(), greater<pair<int, char> >());
    
    //sort(v.begin(), v.end(), less<pair<int, char> >());
    
// 정렬 기준을 선택해줘야하기 때문에 compare함수를 사용해야 합니다
    //sort(v.begin(), v.end(), compare );
   
   for(int i=0;i<v.size(); i++)
   {
        cout << v[i].first << ' ' << v[i].second << '\n';
    }
    return 0;
}

 

 

 

[ 문제 1 ]  www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

[ 문제 2 ]  www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

[ 문제 3 ] www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

[ 문제 4 ] www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

[ 문제 5 ]  www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 �

www.acmicpc.net

[ 백준 10814 소스 코드 ]

https://edukoi.tistory.com/176?category=917269 

 

백준 10814 나이순 정렬 소스 코드

https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한

edukoi.tistory.com

 

[ 문제 6 ]  www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

[ 백준 10825 국영수 소스 코드 ]

edukoi.tistory.com/161

 

백준 10825번 - 국영수 소스 코드

www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해..

edukoi.tistory.com

 

[ 문제 7 ]  www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

[ 백준 10989 수 정렬하기3 - 소스 코드 ]

https://edukoi.tistory.com/177?category=917269 

 

백준 10989 수 정렬하기3 소스 코드

https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이..

edukoi.tistory.com

 

[ 문제 8 ]  www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

[ 문제 9 ] www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

[ 문제 10 ] www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

[ 백준 1181번 단어 정렬 소스 코드 ]

edukoi.tistory.com/163

 

백준 1181번 - 단어 정렬 소스 코드

www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는

edukoi.tistory.com

 

[ 문제 11 ] www.acmicpc.net/problem/11652

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

반응형
Posted by 명문코딩컴퓨터
,