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一样冗长(可能更多).