Почему в стандартной карте C++ нет «указателя возврата на отображаемое значение»? [закрыто]
Кроме
operator[]
и
at()
метод, поиск ключа в
std::map
или
std::unordered_map
должен использовать итератор, и итератор должен быть проверен перед использованием связанного значения. Это справедливо.
Сейчас
contains()
был добавлен к этим контейнерам, но возвращает только
bool
.
Я бы очень хотел увидеть
value_ptr(key)
метод, возвращающий указатель на итератор
second
значение с успешным поиском или
nullptr
.
В качестве альтернативы, возможно, более полезно (с монадическими операциями),
std::optional<value_type&> opt_value(key)
который ничего не будет содержать, если ключ не найден. (Естественно, все с перегрузками для константности.)
Это может привести к более естественному кодированию условных выражений поиска:
if (auto value = my_map.value_ptr(key)) {
do_something_with(*value);
}
Думаю, это более естественно, чем:
if (auto it = my_map.find(key); it != my_map.end()) {
do_something_with(it->second);
}
и эффективнее, чем:
if (my_map.contains(key)) {
do_something_with(my_map.at(key)); // does lookup twice
}
(Для справки, на этот вопрос есть ответ, содержащий шаблоны функций для подобных вещей.)
Есть предположения?