协慌网

登录 贡献 社区

如何找出 std :: vector 中是否存在项目?

我要做的就是检查向量中是否存在某个元素,因此我可以处理每种情况。

if ( item_present )
   do_this();
else
   do_that();

答案

您可以使用<algorithm> std::find

#include <algorithm>
#include <vector>
vector<int> vec; 
//can have other data types instead of int but must same datatype as item 
std::find(vec.begin(), vec.end(), item) != vec.end()

这将返回一个布尔值(如果存在则为true ,否则为false以您的示例为例:

#include <algorithm>
#include <vector>

if ( std::find(vec.begin(), vec.end(), item) != vec.end() )
   do_this();
else
   do_that();

就像其他人所说的那样,请使用 STL 的findfind_if函数。但是,如果要搜索非常大的向量,并且这会影响性能,则可能需要对向量进行排序,然后使用binary_searchlower_boundupper_bound算法。

使用 stl 的算法标头中的 find。我已经说明了 int 类型的用法。您可以使用任何您喜欢的类型,只要您可以比较相等性即可(如果需要,对于自定义类,请重载 ==)。

#include <algorithm>
#include <vector>

using namespace std;
int main()
{   
    typedef vector<int> IntContainer;
    typedef IntContainer::iterator IntIterator;

    IntContainer vw;

    //...

    // find 5
    IntIterator i = find(vw.begin(), vw.end(), 5);

    if (i != vw.end()) {
        // found it
    } else {
        // doesn't exist
    }

    return 0;
}