2020년 7월 1일 수요일

std::sort

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

#include "pch.h"

#include <random>

std::random_device rn;

std::mt19937_64 rnd(rn());

const int Random(const int& min, const int& max)

{

std::uniform_int_distribution<int> range(min, max);

return range(rnd);

}

class Type

{

public:

Type(const int& data) { this->data = data; }

int data;

bool operator<(const Type& r) { return this->data > r.data; }

static bool Compare(Type* l, Type* r) { return l->data > r->data; }

};

bool Compare(int a, int b)

{

return a > b;

}

void main()

{

std::cout << "Value Type" << std::endl;

{

std::vector<int> randoms;

for (int i = 0; i < 10; i++)

randoms.emplace_back(Random(10, 100));

std::sort(randoms.begin(), randoms.end(), Compare); // default 오름차순임

for (auto random : randoms)

std::cout << random << std::endl;

}

std::cout << "Class Type" << std::endl;

{

std::vector<Type> datas;

for (int i = 0; i < 10; i++)

datas.emplace_back(Type(Random(10, 100)));

std::sort(datas.begin(), datas.end());

for (auto data : datas)

std::cout << data.data << std::endl;

}

std::cout << "Pointer Type" << std::endl;

{

std::vector<Type*> pointers;

for (int i = 0; i < 10; i++)

pointers.emplace_back(new Type(Random(10, 100)));

std::sort(pointers.begin(), pointers.end(), Type::Compare); // 연산자 오버로딩 작동 안하네

for (auto pointer : pointers)

std::cout << pointer->data << std::endl;

}

}

std::vector 정리용 함수.

1. 디폴트는 오름차순으로 정리함.

2. 따로 함수 만들어서 비교함수 정의 가능.

3. 그 함수는 인자 2개에 리턴값 bool 로만 해두면 충분함.

4. 그 함수는 클래스는 연산자 오버로딩으로도 처리 가능함.

5. 그 함수는 근데 포인터인 값들이 들어가면 적용 안됨. 이도 그럴게 포인터랑 그냥 값이랑 구분 못하니까.

댓글 없음:

댓글 쓰기

List