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. 그 함수는 근데 포인터인 값들이 들어가면 적용 안됨. 이도 그럴게 포인터랑 그냥 값이랑 구분 못하니까.
댓글 없음:
댓글 쓰기