map<uint32_t, classA> 이런 식의 map가 있습니다.
class A에는 주소 첫값, 끝값 이렇게 2개의 uint32_t(startAddress, endAddress)가 있고,
첫값은 map의 key로 쓰입니다.
[startAddress, endAddress) 범위에 있는(startAddress보다 크거나 같고 endAddress보다 작은) 값이 들어오면 해당하는 pair에 대한 iterator를 리턴하게 하려고 합니다.
근데 그냥 lower_bound, upper_bound를 쓰면 원하는 범위가 안 나오네요.
어떤 상황이냐면,
2개의 pair가 map에 들어가 있다고 합시다.
(startAddress, endAddress) = (7dd70e00, 7dd7103d), (7dd7103d, 7dd71072) 이렇게 2개라고 하면,
입력값에 따른 리턴값이 이렇게 되어야 합니다:
1. 7dd70d00 : (7dd70e00, 7dd7103d)를 가리키는 iterator
2. 7dd70e00: (7dd70e00, 7dd7103d)를 가리키는 iterator
3. 7dd70fff: (7dd70e00, 7dd7103d)를 가리키는 iterator
4. 7dd7103d: (7dd7103d, 7dd71072)를 가리키는 iterator
5. 7dd710ee: (7dd7103d, 7dd71072)를 가리키는 iterator
lower_bound를 쓰면 이렇게 됩니다:
1. 7dd70d00 : (7dd70e00, 7dd7103d)를 가리키는 iterator
2. 7dd70e00: (7dd70e00, 7dd7103d)를 가리키는 iterator
3. 7dd70fff: (7dd7103d, 7dd71072)를 가리키는 iterator
4. 7dd7103d: (7dd7103d, 7dd71072)를 가리키는 iterator
5. 7dd710ee: map의 끝을 가리키는 iterator
upper_bound를 쓰면 이렇게 됩니다:
1. 7dd70d00 : (7dd70e00, 7dd7103d)를 가리키는 iterator
2. 7dd70e00: (7dd7103d, 7dd71072)를 가리키는 iterator
3. 7dd70fff: (7dd7103d, 7dd71072)를 가리키는 iterator
4. 7dd7103d: map의 끝을 가리키는 iterator
5. 7dd710ee: map의 끝을 가리키는 iterator
제 기억에 이걸 key_comp였나? map을 만들 때 비교 함수를 잘 지정해 주면 제가 원하는 범위의 값이 나왔던 거 같은데,
그 방법을 잊어버려서 질문합니다.
방법이 없을까요?