通常我不关心集合中项目的值(value),只关心是否存在。并且重复编写if (s.find(val) == s.end())
冗长,丑陋且可读性差。
有没有一种看起来像if (contains(s,val))
的好方法,这有点标准(STL,boost)。
奖励点也适用于 map 。
是的,我知道我可以
#define has(X,Y) (X).find(Y) != (X).end()
template<T,U> inline bool has(T s,U elt) {return s.find(elt) != s.end();}
但是我宁愿使用最佳实践,也不愿重造许多小型实用程序。
最佳答案
如果您主要关注简洁,那么我建议:
if (s.count(val)) {
// count == 1 == true, element exists
} else {
// count == 0 == false, element does not exist
}
但就个人而言,由于意图更明确,我仍然更喜欢检查是否符合目的。这对我来说值得额外打字。