2010-01-15 2 views
1

중복 된 코드를 리펙토링하려고합니다. 두 함수는 모두 equal_range()를 사용하여 멀티 맵에서 검색합니다. equal_range()를 호출 한 후 for 루프에는 반복자가 equalRange.first로 설정되고 for! = equalRange.second 조건이 설정되는 for 루프가 있습니다.오류가 발생하지 않고 equal_range를 사용하여 멀티 맵 검색에서 돌아 가기

올바른 값을 찾으면 두 기능이 다릅니다. 내가 뭘하고 싶은지 은 이전에 언급 된 2에 의해 사용되는 자체 도움말 기능으로 검색 기능을 가지고 있습니다.

저 작업을하는 것이 문제가되지 않습니다. 문제는 내가이 코드를 사용하는 다른 사람들에게 의미가있는 방식으로 "쉽고"미래의 증거가 될 수있는 방법을 찾아 낼 수 없다는 것입니다. 분명히, 나는 뭔가를 검색 기능에서 반환하고 싶습니다.

만약 값이 멀티 맵에서 발견되었다는 것을 나타내는 boolean 값을 반환한다면, 나는 엘리먼트를 가리키는 멀티 맵에 iterator를 넘겨 주어야한다. 나는 꽤 이상한 것을 발견한다 추한.

반복자가 반환 된 경우 물론 검색 기능을 사용하는 두 함수의 경계 인 에 대해 확인해야합니다. equal_range를 사용하기 때문에 을 multimap.end()와 비교할 수 없습니다. 따라서 equalRange.second는 과 같아야합니다. 따라서 multimap.end()와 같아야합니다. checkBound (x)는 과 multimap :: 어느 상한선을 반환 곳 returnIter == checkBound을 확인

사용하여 경계 (x)는 (x)는 checkBound한다 (x)는 검색 기능의 equal_range 구현 의 알고 있습니다. 따라서 다른 사람이 검색 기능을 변경해야하는 경우 checkBound (x)가 예상대로 작동하지 않을 수 있습니다.

필자가 여기서 지적하는 점은 검색 기능을 사용하는 사용자는 구현 방식과 관련이 없어야한다는 것입니다. 즉, equal_range를 사용 하는지를 알아야합니다.

입력 사항 및 제안 사항은 무엇입니까? 내가 여기서 자세히 설명해 주 었니? 검색 기능을 어떻게 구현 했습니까? 당신이 map::insert 같은 기능을 할 일을 할 것 같은

감사

답변

1
중 하나 대신의

/또는 반환 값에 대한 결정은, 그것은 나에게 소리 - 위치와 성공을 모두 표시하기 위해 std::pair<iterator, bool>를 반환/검색 기능이 실패했습니다.

+0

그렇게 생각하지 않았습니다. 건배! – Tomas