Я собираюсь провести рефакторинг некоторого дублированного кода. Две функции поиска в мультикарте
equal_range (). В цикле for после вызова equal_range () существует цикл for, который устанавливает
итератор для equalRange.first с условием it! = equalRange.second.
Если найдено правильное значение, две функции различаются. Что я хотел бы сделать, это
иметь функцию поиска в качестве собственной справочной функции, используемой ранее
упомянул два.
Сделать эту работу не проблема. Проблема в том, что я не могу найти способ
сделать его «легким» и будущим способом, который имеет смысл для других людей, использующих этот код.
Очевидно, я бы хотел, чтобы что-то вернулось из функции поиска.
Если бы я возвращал логическое значение, чтобы указать, было ли найдено значение в мультикарте, я бы
должен передать итератор мультикарте, которая указывает на элемент. Я нахожу это довольно
некрасиво.
Если вместо этого был возвращен итератор, мы, конечно, должны проверить это по
границы обратно в две функции, которые используют функцию поиска. Мы не можем это проверить
против multimap.end (), так как мы используем equal_range, так что equalRange.second не должен
равно multimap.end ().
Использование проверки границ returnIter == checkBound (x), где checkBound (x) возвращает
multimap :: upperbound (x) информирует checkBound (x) о реализации equal_range
функции поиска. Следовательно, если кто-то должен был изменить функцию поиска,
checkBound (x) может работать не так, как ожидалось.
Моя точка зрения здесь заключается в том, что пользователи функции поиска не должны интересоваться тем, как она реализована, т.е. не должны знать, что она использует equal_range.
Каковы ваши мнения и предложения по этому поводу? Я чересчур подробно здесь? Как бы вы реализовали функцию поиска?
Спасибо