[알고리즘] 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)
  • 태그

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

티스토리툴바