检查一个std :: vector是否包含某个对象?

可能重复:
如何在std :: vector中找到一个项目?

<algorithm>有什么可以让你检查一个std :: container是否包含某些东西? 或者,制作一个方法,例如:

if(a.x == b.x && a.y == b.y)
return true;

return false;

这只能用std::map完成,因为它使用了键?

谢谢


检查v包含元素x

#include <algorithm>

if(std::find(v.begin(), v.end(), x) != v.end()) {
    /* v contains x */
} else {
    /* v does not contain x */
}

检查v包含元素(非空):

if(!v.empty()){
    /* v is non-empty */
} else {
    /* v is empty */
}

如果搜索一个元素很重要,我建议使用std::set而不是std::vector 。 使用这个:

std::find(vec.begin(), vec.end(), x)在O(n)时间运行,但std::set有它自己的find()成员(即myset.find(x) )在O(log n)时间运行 - 对于大量元素来说效率更高

std::set还可以保证所有添加的元素都是唯一的,这样可以避免你不必做任何事情,比如if not contained then push_back()...


看问题:如何在std :: vector中找到一个项目?

你还需要确保你已经为你的对象实现了一个合适的operator==() ,如果默认的operator==()不足以进行“深度”相等性测试。

链接地址: http://www.djcxy.com/p/85869.html

上一篇: check if a std::vector contains a certain object?

下一篇: How to sum up elements of a C++ vector?