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

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

return false;

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

谢谢


当前回答

如果搜索一个元素很重要,我推荐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()....的操作

其他回答

如果搜索一个元素很重要,我推荐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()....的操作

检查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中找到一个项?

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