关于c ++:检查std :: vector是否包含某个对象?

check if a std::vector contains a certain object?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to find an item in a std::vector?

中是否有允许您检查std::container是否包含某些内容的东西?或者,一种制作方法,例如:

1
2
3
4
if(a.x == b.x && a.y == b.y)
return true;

return false;

这只能用std::map来完成吗,因为它使用密钥?

谢谢


检查v是否包含元素x

1
2
3
4
5
6
7
#include

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

检查EDOCX1[1]是否包含元素(非空):

1
2
3
4
5
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(logn)时间内运行,这对大量元素来说效率更高。

std::set还保证了所有添加的元素都是唯一的,这样您就不必做任何类似if not contained then push_back()...的事情。


请参见问题:如何在std::vector中查找项?

如果默认的一个不足以进行"深度"相等性测试,则还需要确保为对象实现了一个合适的EDCOX1 0。