Возврат из поиска по нескольким картам с помощью equal_range без ошибок

StackOverflow https://stackoverflow.com/questions/2071411

Вопрос

Я собираюсь провести рефакторинг некоторого дублированного кода.Обе функции выполняют поиск в мультикарте с помощью equal_range().В цикле for после вызова equal_range() есть цикл for, который устанавливает итератору значение equalRange.first с условием it != equalRange.second.

Если найдено правильное значение, то эти две функции различаются.Что я хотел бы сделать, так это иметь функцию поиска в качестве собственной справочной функции, используемой ранее упомянутыми двумя.

Заставить это работать - не проблема.Проблема в том, что я не могу найти способ сделать это "простым" и проверенным на будущее способом, который имеет смысл для других людей, использующих этот код.Очевидно, я хотел бы, чтобы что-то вернулось из функции поиска.

Если бы я должен был вернуть логическое значение, чтобы указать, было ли найдено значение в multimap, я бы должен был передать итератор в multimap, который указывает на элемент.Я нахожу это довольно некрасивым.

Если вместо этого был возвращен итератор, мы, конечно, должны проверить это на соответствие границам в двух функциях, которые используют функцию поиска.Мы не можем проверить его против Мультикарты.конец (), поскольку мы используем equal_range так equalRange.второй не обязательно равные Мультикарты.конец().

Используя функцию проверки границ returnIter == checkBound(x), где checkBound(x) возвращает multimap::upperbound(x) информирует checkBound (x) о реализации equal_range функции поиска.Следовательно, если кто-то другой изменит функцию поиска, флажок (x) может работать не так, как ожидалось.

Моя постоянная точка зрения здесь заключается в том, что пользователи функции поиска не должны быть обеспокоены тем, как она реализована, т. е. не должны знать, что она использует equal_range .

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

Спасибо

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top