Возврат из поиска по нескольким картам с equal_range, не подверженный ошибкам - PullRequest
1 голос
/ 15 января 2010

Я собираюсь провести рефакторинг некоторого дублированного кода. Две функции поиска в мультикарте 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.

Каковы ваши мнения и предложения по этому поводу? Я чересчур подробно здесь? Как бы вы реализовали функцию поиска?

Спасибо

1 Ответ

1 голос
/ 15 января 2010

Вместо того, чтобы / или принять решение о возвращаемом значении, для меня это звучит так, как если бы вы хотели делать то, что, например, map::insert do - возвращать std::pair<iterator, bool>, чтобы сигнализировать как о положении, так и об успехе / неудаче функция поиска.

...