template <typename T, typename Key>
bool key_exists(const T& container, const Key& key)
{
return (container.find(key) != std::end(container));
}
물론 더 좋아지기를 원한다면 발견 된 기능과 발견되지 않은 기능을 취하는 함수를 항상 템플릿으로 만들 수 있습니다.
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);
}
}
그리고 이것을 다음과 같이 사용하십시오 :
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; });
이것의 단점은 좋은 이름으로 나오고 있습니다. "find_and_execute"는 어색하며 내 머리 꼭대기에서 더 나은 것을 만들 수는 없습니다 ...
std::pair<iterator,bool> insert( const value_type& value );
그것이 반환되는 부울은 무엇입니까? 키가 이미 있는지 여부를 알려줍니까?