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;
}
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};
}
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