在<algorithm>中是否有一些东西允许你检查std:: container是否包含某些东西?或者,一种制作方法,例如:
<algorithm>
if(a.x == b.x && a.y == b.y) return true; return false;
因为std::map使用键,所以这只能用std::map完成吗?
std::map
谢谢
参见问题:如何在std::向量中找到一个项目?
如果默认的operator==()不足以进行“深度”相等性测试,则还需要确保为对象实现了合适的operator==()。
operator==()
检查v是否包含元素x:
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::set
std::vector
std::find(vec.begin(), vec.end(), x)在O(n)时间内运行,但std::set有自己的find()成员(即。myset.find(x)),它在O(log n)时间内运行-对于大量元素来说,这要有效得多
std::find(vec.begin(), vec.end(), x)
find()
myset.find(x)
std::set还保证所有添加的元素都是唯一的,这使你不必像if not contained then push_back()...那样做任何事情。
if not contained then push_back()...