【发布时间】:2014-01-02 14:02:27
【问题描述】:
对于一个 STL 集,您似乎应该能够说:
if(s.find(x)) {
//Something
}
相对
if(s.find(x) != s.end()) {
//Something
}
此外,如果可以将 set-iterators 强制转换为 bool(如果内部指针不为 null,则为 true),您将能够做到。为什么 STL 集合迭代器没有这个简单的功能?这是故意遗漏的吗?
澄清:
另外,set 可能只有一个 set::contains(x) 方法,该方法直接返回一个 bool,但这似乎也没有实现。我知道这只是几个字符,但是在 s 是某个函数的返回值的情况下,这可能会令人沮丧,因为需要创建一个临时变量,即(假设 m 的类型为 map<int,set<int>>)
const set<int>& s = m[i];
return s.find(x) != s.end();
相对
return m[i].contains(x);
或
return m[i].find(x);
编辑:
我没有意识到 count() 方法可以用作 contains()。投票结束,因为这个问题没有正确表达我真正应该问的问题:STL::set 有一个“包含”方法吗?
【问题讨论】:
-
为什么你可以写
s.find(x)?迭代器是位置,位置具有布尔状态似乎没有充分的理由。 -
语义上,
end迭代器和null是两个不同的概念 -
“如果内部指针不为空,则为真”——哇哦。谁说集合迭代器等于 end 当且仅当它的“内部指针为空”?并不是说它真的会影响您问题的主要部分,但这是对
set实施的毫无根据的假设。 -
"可能只有一个
set::contains(x)直接返回布尔值的方法,但这似乎也没有实现"。是的,正如本杰明刚才所说。该函数称为count,而不是contains。
标签: c++ stl casting boolean set