11651번: 좌표 정렬하기 2

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

www.acmicpc.net

문제

 

[C++, STL] 구조체, pair 벡터 정렬

다른 글 [C++, STL] 알고리즘 문제풀이를 위한 벡터(vector) [C++, STL] 알고리즘 문제풀이를 위한 pair [C++, STL] 우선순위 큐(priority queue) 비교연산자 구현 서론 벡터에 들어갈 수 있는 자료형에 pair와 st..

hydroponicglass.tistory.com

y좌표를 기준으로 오름차순 정렬을 해야한다. y좌표가 같으면 x좌표가 증가하는 순서로 정렬한다. y좌표를 기준으로 해야해서 compare함수를 구현안하고 x,y위치를 바꿔서 정렬한 뒤 반대로 출력할까 했지만 이김에 위 링크를 기준으로 compare함수를 구현해보았다. 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

	else {
		return a.second < b.second;
	}
}

int main()
{
	int n, x, y;
	
	cin >> n;
	vector<pair<int, int>> vec(n);
	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		vec[i].first = x;
		vec[i].second = y;
	}

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

	for (int i = 0; i < n; i++) {
		printf("%d %d\n", vec[i].first, vec[i].second);
	}

	return 0;
}