Tim*_*Tim 13 c++ containers integer contains insert
我想使用一个结构,我插入整数,然后可以问
if (container.contains(3)) { /**/ }
Run Code Online (Sandbox Code Playgroud)
必须有类似的东西.
Jes*_*ond 15
你可以用std::vector.
std::vector<int> myVec;
myVec.push_back(3);
if (std::find(myVec.begin(), myVec.end(), 3) != myVec.end())
{
// do your stuff
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以做一个小帮手功能:
template <class T>
bool contains(const std::vector<T> &vec, const T &value)
{
return std::find(vec.begin(), vec.end(), value) != vec.end();
}
Run Code Online (Sandbox Code Playgroud)
以下是如何使用它:
if (contains(myVec, 3)) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
简单的算法:
template <typename Container>
bool contains(Container const& c, typename Container::const_reference v) {
return std::find(c.begin(), c.end(), v) != c.end();
}
Run Code Online (Sandbox Code Playgroud)
您可以对其进行自定义,以便更有效地搜索某些已知容器:
template <typename Key, typename Cmp, typename Alloc>
bool contains(std::set<Key,Cmp,Alloc> const& s, Key const& k) {
return s.find(k) != s.end();
}
template <typename Key, typename Value, typename Cmp, typename Alloc>
bool contains(std::map<Key,Value,Cmp,Alloc> const& m, Key const& k) {
return m.find(k) != m.end();
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以获得一个对任何容器类型执行搜索的算法,并且特别可以在订购的容器上加快速度.