[알고리즘] C++ STL sort() 함수_Vector/Pair

2022. 2. 10. 09:25·알고리즘/풀이 힌트
반응형

클래스(Class)를 정의해서 여러 개의 변수가 존재하는 상황에서 '특정한 변수' 를 기준으로 정렬하는 방법은

실무에서는 적합한 방법이지만 프로그래밍 속도 측면에서는 유리하지 않다.

​

일반적으로 프로그래밍 대회같은 빠른 개발이 필요할 때는 페어(Pair) 라이브러리를 사용하는 것이 효율적이다.

#include <iostream>   
#include <algorithm>  
#include <string>
#include <vector>   // vector가 정의되어 있는 헤더

using namespace std;

int main(void) {  
	             
	vector<pair<int, string> > v;  // pair : 한 쌍의 배열(int, string)을 묶어음
	v.push_back(pair<int, string>(90, "잉여인간 1호"));  // 배열의 마지막 부분에 삽입을 나타내는 push.back
	v.push_back(pair<int, string>(85, "잉여인간 2호"));
	v.push_back(pair<int, string>(65, "잉여인간 3호"));
	v.push_back(pair<int, string>(84, "잉여인간 4호"));
	v.push_back(pair<int, string>(78, "잉여인간 5호"));

	sort(v.begin(), v.end());  // 배열의 첫번째 값 부터 마지막 값 까지 정렬

	for (int i = 0; i < v.size(); i++) {  // v.size() : 백터의 크기
		cout << v[i].second << ' ';   // second는 선언시 int와 string중 2번째 즉 string 을 가져온다는 뜻
	}                                 // first 입력시 int 즉 점수를 가져온다.
	return 0;
}

벡터(Vector) 라이브러리와 페어(Pair) 라이브러리를 이용해 Class를 사용하여 정렬했던 방식을 대처하였다.

이처럼 벡터(Vector) 라이브러리와 페어(Pair) 라이브러리 등을 이용하여 코드의 길이를 짧게 해주는 기법을

숏 코딩(Short Coding)이라고 한다.

​

=> 코드의 시간 복잡도가 동일하다면 프로그래밍 대회에서는 소스코드가 짧을 수록 남들보다 앞서다고 한다.

​

벡터(Vector) STL은 배열과 같이 작동하고 원소를 선택적 삽입(Puch) 삭제(Pop)을 할 수 있다.

=> 즉 배열을 보다 사용하기 쉽게 개편한 자료구조이다.

​

페어(Pair) STL은 한 쌍의 데이터를 처리할 수 있게 해주는 자료 구조이다.

​

​

2개 이상의 변수를 정렬하는 방법

#include <iostream>   
#include <algorithm>  
#include <string>
#include <vector>   // vector가 정의되어 있는 헤더

using namespace std;

bool compare(pair<string, pair<int, int> > a,
			  pair<string, pair<int, int> > b) {
	if (a.second.first == b.second.first) {  
		return a.second.second > b.second.second; // 성적이 같다면 생년월일이 느린사람이 우선
	}
	else {
		return a.second.first > b.second.first;    
	}
}

int main(void) {
	vector<pair<string, pair<int, int> > > v;   // pair 안에 pair가 들어가는 2중 pair
	
	v.push_back(pair<string, pair<int, int> >("잉여인간 1호", pair<int, int>(95, 19970321)));  // 이름 성적 생년월일을 입력
	v.push_back(pair<string, pair<int, int> >("잉여인간 2호", pair<int, int>(90, 19970321)));
	v.push_back(pair<string, pair<int, int> >("잉여인간 3호", pair<int, int>(89, 19970321)));
	v.push_back(pair<string, pair<int, int> >("잉여인간 4호", pair<int, int>(75, 19970321)));
	v.push_back(pair<string, pair<int, int> >("잉여인간 5호", pair<int, int>(94, 19970321)));

	sort(v.begin(), v.end(), compare);

	for (int i = 0; i < v.size(); i++) { 
		cout << v[i].first << ' ';        // 이름 순으로 출력
	}
}

정렬을 해주어야 하는 개수가 2개 이상일 경우 추가로 compare를 정의해주어야 한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 풀이 힌트' 카테고리의 다른 글

[알고리즘] 계수 정렬  (0) 2022.02.10
[알고리즘] 힙 정렬  (4) 2022.02.10
[알고리즘] C++ STL sort() 함수_class  (0) 2022.02.10
[알고리즘] 퀵 정렬_구현  (0) 2022.02.09
[알고리즘] 퀵 정렬_원리  (0) 2022.02.09
'알고리즘/풀이 힌트' 카테고리의 다른 글
  • [알고리즘] 계수 정렬
  • [알고리즘] 힙 정렬
  • [알고리즘] C++ STL sort() 함수_class
  • [알고리즘] 퀵 정렬_구현
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    바질
    식물
    Docker
    리얼학습일기
    Babel
    프로그래머스
    javascript
    typescript
    다이소
    네트워크
    자바스크립트
    리액트
    CSS
    redux
    리얼클래스
    덤프
    영어회화
    ReactNative
    CCNA
    ChatGPT
    네이버 부스트캠프
    타일러영어
    Node.js
    바질 키우기
    알고리즘
    webpack
    타입스크립트
    next.js
    영어독학
    react
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] C++ STL sort() 함수_Vector/Pair
상단으로

티스토리툴바