티스토리 뷰

안녕하세요? 오늘은 벡터를 오름차순과 내림차순으로 정렬하는 방법에 대해 살펴보겠습니다.


람다를 사용하여 정렬하였습니다.

#include <iostream>
#include <functional>
#include <ctime>
#include <vector>
#include <algorithm>
#define V_SIZE 1

std::vector<int> genRandomNum(int maximum, int size);
void printVector(std::vector<int> vector);

int main() 
{
	srand((unsigned int)time(NULL));
	auto genVector = std::bind(genRandomNum, 100, 10);
	std::vector<std::vector<int>> vInt(V_SIZE);

	for (int i = 0; i < V_SIZE; i++) {
		vInt[i] = genVector();
	}
 
	for (std::vector<int> v : vInt) {
		std::cout << "정렬 전: ";
		printVector(v);

		// Sort in a ascending order
		sort(v.begin(), v.end(),
			[](int first, int second) -> bool
		{
			return first < second;
		});


		std::cout << "정렬 후(오름차순): ";
		printVector(v);

		// Sort in a descending order
		sort(v.begin(), v.end(),
			[](int first, int second) -> bool
		{
			return first > second;
		});

		std::cout << "정렬 후(내림차순): ";
		printVector(v);
		std::cout << std::endl;
	}
	return 0;
}

std::vector<int> genRandomNum(int maximum, int size)
{
	std::vector<int> temp;
	for (int i = 0; i < size; i++) {
		temp.push_back(rand() % maximum + 1);
	}
	return temp;
}

void printVector(std::vector<int> vector)
{
	for (auto v : vector)
	{
		std::cout << v << ' ';
	}
	std::cout << std::endl;
}

[결과 화면]


10개의 1~100사이 임의의 정수를 가진 벡터를 1개 선언하여 출력시키고 오름차순과 내림차순 정렬을 시켜보았습니다.

genRandomNum() 함수와 100(최대값)과 10(개수)을 binding하고 이를 genVector가 reference하도록 하였습니다. genVector()를 호출하면 1~100사이의 임의의 정수를 가진 벡터 1개 를 반환하고 이를 활용하여 여러 개의 벡터를 초기화 시킬 수 있도록 하였습니다. (예제에서는 1개만 초기화 하였습니다.)


람다를 사용하지 않고 sort()함수를 사용하여 정렬하는 방법으로는 람다식이 있는 자리에 일반 함수를 작성하여 함수명을 넣어주셔도 됩니다.


감사합니다.

'프로그래밍 언어 > C++' 카테고리의 다른 글

함수형 프로그래밍) 람다(Lambda) 사용하기  (0) 2018.05.26
댓글