C++中如何判断set存在值为0的元素,find方法失效应使用什么替代
问题原因
你代码里的std::set::find()用法存在错误,该方法本身完全可以实现元素存在性判断,不需要替换方法,修正判断逻辑即可:
find()返回值是std::set的迭代器类型,不能直接和整数0比较,你之前的判断逻辑完全不成立。- 正确的判断规则是:如果
find()返回值等于容器的end()迭代器,说明未找到目标元素,否则说明元素存在。
修正后使用find()的可运行代码
#include <iostream> #include <set> using namespace std; int main() { set<int> numbers; // 插入测试元素 numbers.insert(0); numbers.insert(3); numbers.insert(5); for(int j = 0; j < 10; j++) { if (numbers.find(j) != numbers.end()) { cout << j << " 存在,输出Yes." << endl; } else { cout << j << " 不存在,输出No." << endl; } } return 0; }
C++20及以上版本更简洁的写法
如果你使用的编译环境支持C++20及更高标准,可以直接调用contains()方法,该方法会直接返回布尔值表示元素是否存在,不需要额外判断迭代器:
if (numbers.contains(j)) { cout << "Yes." << endl; } else { cout << "No." << endl; }
内容的提问来源于stack exchange,提问作者teki2021
相关产品推荐
相关产品推荐

