在<算法>中是否有一些东西允许您检查std:: container是否包含某些内容?或者,一种制作方法,例如:
if(a.x == b.x && a.y == b.y)
return true;
return false;
这只能用std::map完成,因为它使用键?
谢谢
在<算法>中是否有一些东西允许您检查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::vector中找到一个项?
如果默认的操作符不足以进行“深度”相等性测试,还需要确保为对象实现了合适的操作符==()。
检查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还可以保证所有添加的元素都是唯一的,这样就不必执行类似如果不包含则push_back()....的操作