实现检查一个元素是否存在标准容器的代码片段


#1

c++容器一直都缺少判断一个元素是否存在容器中,这样的方法。 于是我们每次都不得不用以下2种办法来检查一个元素是否存在容器当中: c.find(v) != c.end() 或者 std::find(c.begin(), c.eng(), v) != c.end() 这种方式来判断,这样的代码写的多了,就会感觉十分影响版面排版。 下面我写了一段代码,来判断一个value是否存在容器当中,用的时候, 直接使用 bool b = in_container(c, v); 就可以得到结果了,目前这个方法同时也考虑了多数stl容器。

template <typename T>
struct Void {
	typedef void type;
};

template<typename T, typename U = void>
struct has_key_type : public std::false_type
{};

template<typename T>
struct has_key_type<T, typename Void<typename T::key_type>::type > : public std::true_type
{};

template <typename C, typename V>
typename std::enable_if<has_key_type<C>::value, bool>::type
in_container(const C& c, const V& v)
{
	return c.find(v) != c.end();
}

template <typename C, typename V>
typename std::enable_if<!has_key_type<C>::value, bool>::type
in_container(const C& c, const V& v)
{
	return std::find(c.begin(), c.end(), v) != c.end();
}