반응형


vector는 자연스럽게 comp를 이용 할 수 있는데 map에서는 struct를 이용하기 위해 비교 연산자를 추가해야한다.


이때 오퍼레이터를 아래와 같이 이용하면 된다.



struct를 하나의 라이브러리로 만들기 위해서는 비교 연산자를 지역적으로 쓴다.(struct 내부에)


이때 멤버 함수를 struct 내부에 쓰기 위해서는 const로 해주어야 한다.


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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
 
using namespace std;
 
struct info {
    int a, b;
    bool operator < (const info &t) const {
        if (a != t.a)
            return a < t.a;
        return b < t.b;
    }
};
 
int main() {
    map<info, int> mp;
 
    mp[{12}] = 1;
    mp[{34}] = 1;
    mp[{-15}] = 1;
 
    for (auto it = mp.begin(); it != mp.end(); it++) {
        cout << it->first.a << " " << it->first.b << endl;
    }
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



비교 연산자를 전역으로 쓰려면 아래와 같이 한다.


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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
 
using namespace std;
 
struct info {
    int a, b;
};
bool operator < (const info &a, const info &b) {
    if (a.a != b.a)
        return a.a < b.a;
    return a.b < b.b;
}
int main() {
    map<info, int> mp;
 
    mp[{12}] = 1;
    mp[{34}] = 1;
    mp[{-15}] = 1;
 
    for (auto it = mp.begin(); it != mp.end(); it++) {
        cout << it->first.a << " " << it->first.b << endl;
    }
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus






반응형

'Applied > 알고리즘' 카테고리의 다른 글

병합 정렬(Merge Sort) 좀더 깔끔하게 짠 코드  (0) 2019.03.12
O(n^2) 정렬 알고리즘  (0) 2018.10.18
strtok를 이용하여 토큰 단위 값 받기  (0) 2018.10.05
GCD, LCM STL  (2) 2018.10.04
편집거리 알고리즘  (2) 2018.06.29