通常我不关心集合中项目的值(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
}

但就个人而言,由于意图更明确,我仍然更喜欢检查是否符合目的。这对我来说值得额外打字。

10-08 07:13
查看更多