7 Aralık 2020 Pazartesi

std::map.find metodu

Giriş
std::map.find() bir iterator döner. Bu sonucu std::map.end() ile karşılaştırmak gerekir. Klasik kullanımda şöyle yaparız
const std::map<int, std::string> numberToStr{{1, "one"}, {2,"two"}};
int main() {
  auto it = numberToStr.find(2);
  if (it ==numberToStr.end()){
    return 1;
  }
  const auto&[_, str] = *it;
  std::cout << str;
}
Bu kullanımı std::optinal ile birleştirmek mümkün. Şöyle bir yardım metod olsunn
template <typename Key, typename Value, typename... Rest>
std::pair<std::optional<Key>, std::optional<Value>> my_find(const std::map<Key, Value,
Rest...>& map, const Key& to_find)
{ auto it = map.find(to_find); if (it == map.end()) return {}; else return {it->first, it->second}; }
Kullanmak için şöyle yaparız
const auto&[_, str] = my_find(numberToStr, 2);
// _ is std::optional<int>, str is std::optional<str>
if (!str){
  return 1;
}
std::cout << *str;

Hiç yorum yok:

Yorum Gönder