Почему в стандартной карте 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
}

(Для справки, на этот вопрос есть ответ, содержащий шаблоны функций для подобных вещей.)

Есть предположения?

0 ответов

Другие вопросы по тегам