C简明地检查STL容器中的项目(例如矢量)

前端之家收集整理的这篇文章主要介绍了C简明地检查STL容器中的项目(例如矢量)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
bool xInItems = std::find(items.begin(),items.end(),x) != items.end();

有没有更简洁的方法来检查x是否在项目中?这似乎不必要地冗长(重复项目三次),这使得代码的意图有点难以阅读.

例如,是否有类似以下内容

bool xInItems = boost::contains(items,x);

如果不存在任何更简洁的boost / stl算法来检查集合是否包含项目,那么使用辅助函数来启用contains(items,x)是否被视为好或坏的做法?

我使用错误的STL容器吗?即使是std :: set也会导致bool xInItems = items.find(x)!= items.end();这看起来仍然很冗长.我是否以错误的方式思考这个问题?

解决方法

如果您的数据已排序,您可以使用std :: binary_search,它返回一个bool:
bool xInItems = std::binary_search(items.begin(),x));

如果你确实需要保留未排序的项目,但是C 11可用,你可以使用std :: any_of,但它需要一个谓词,所以它最终可能最终像std :: find一样冗长(可能更多).

原文链接:/c/239615.html

猜你在找的C&C++相关文章