【问题标题】:Why does C++ containers not have a contains method? [closed]为什么 C++ 容器没有 contains 方法? [关闭]
【发布时间】:2019-11-06 12:35:17
【问题描述】:

检查成员资格是任何编程语言中最常用的操作之一,但 C++ 坚持程序员使用冗长的container.find(value) != container.end() 而不是可读的container.contains(value)。不为此操作添加语法糖的原因是什么?

【问题讨论】:

  • *sets 和 *maps 都将拥有来自 C++20 的 contains
  • 更糟糕的是,并不是所有的容器都有专门的find() 方法,所以你必须改用std::find()
  • @RemyLebeau 但是你不应该使用的容器!啊!
  • "检查成员资格是任何编程语言中最常用的操作之一" 需要引用。获取您找到的元素通常比仅测试成员资格更有价值。

标签: c++ syntactic-sugar


【解决方案1】:

并非所有容器都如此。例如; std::set 有一个.count() 成员函数,与contains 基本相同,如果容器不包含元素,它将返回0,如果包含元素,它将返回>0。还有适用于所有容器的std::any_of

【讨论】:

    【解决方案2】:

    有一种方法可以检查容器是否包含对象:std::any_of()。这也更加灵活,因为它需要一个谓词来确定对象是否在容器中。

    【讨论】:

    • 因为这适用于迭代器,所以不适合集合和地图等用例。
    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多