加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读