template <typename T, typename Key>
bool key_exists(const T& container, const Key& key)
{
return (container.find(key) != std::end(container));
}
Tất nhiên, nếu bạn muốn có được fancier, bạn luôn có thể tạo ra một hàm cũng lấy một hàm tìm thấy và một hàm không tìm thấy, đại loại như thế này:
template <typename T, typename Key, typename FoundFunction, typename NotFoundFunction>
void find_and_execute(const T& container, const Key& key, FoundFunction found_function, NotFoundFunction not_found_function)
{
auto& it = container.find(key);
if (it != std::end(container))
{
found_function(key, it->second);
}
else
{
not_found_function(key);
}
}
Và sử dụng nó như thế này:
std::map<int, int> some_map;
find_and_execute(some_map, 1,
[](int key, int value){ std::cout << "key " << key << " found, value: " << value << std::endl; },
[](int key){ std::cout << "key " << key << " not found" << std::endl; });
Nhược điểm của việc này là xuất hiện một cái tên hay, "find_and_execute" thật khó xử và tôi không thể nghĩ ra bất cứ điều gì tốt hơn ngoài đỉnh đầu của mình ...
std::pair<iterator,bool> insert( const value_type& value );
Bool nó trả về là gì? Nó có nói, nếu chìa khóa đã có mặt hay chưa?