C简明地检查STL容器中的项目(例如矢量)
发布时间:2020-12-16 05:01:09 所属栏目:百科 来源:网络整理
导读:bool xInItems = std::find(items.begin(),items.end(),x) != items.end(); 有没有更简洁的方法来检查x是否在项目中?这似乎不必要地冗长(重复项目三次),这使得代码的意图有点难以阅读. 例如,是否有类似以下内容: bool xInItems = boost::contains(items,x)
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一样冗长(可能更多). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |