检查一个std :: vector是否包含某个对象?
可能重复:
如何在std :: vector中find一个项目?
在<algorithm>
有什么东西可以让你检查一个std ::容器是否包含某些东西? 或者,一个方法,例如:
if(ax == bx && ay == by) 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 */ }
如果search一个元素是重要的,我build议使用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中find一个项目?
你还需要确保你已经为你的对象实现了一个合适的operator==()
,如果缺省的operator==()
不足以进行“深度”相等性testing的话。