当所有元素都应该是唯一的时,为什么STL set有count()?

Nav*_*Nav 11 c++ stl set

我可以理解multiset有count(),用于计算值的出现次数,因为元素可以在multiset中重复.但是,如果所有值都是唯一的,那么将count()设置为set是什么意思?

Jam*_*lis 17

count关联容器要求的一部分(1).

每个关联容器都需要将其作为其接口的一部分提供,即使结果始终为零或一个情况也是如此std::set.


(1)这是描述关联容器概念的SGI STL文档的链接; C++标准中定义的概念可能略有不同,但并不重要.

  • @Nav:它不能用`std :: set`的空体实现,因为它必须测试该元素是否存在于集合中.它可以用`std :: set :: find`来实现,但是``return find(k)!= end()?1:0;`).这不是荒谬的; 甚至对于`std :: set`它也会告诉你容器中存在多少具有给定键的元素; 它恰好发生在`std :: set`中,答案总是为零或一. (3认同)
  • 值得注意的是,通过在界面中具有更多的通用性,可以更容易地编写可以与任何容器一起使用的更高级别的算法,并且更容易更改硬编码一个容器以使用另一个容器的代码.只有当操作在语义上相似时才有意义,这就是为什么STL不会让不同的容器的接口相似的原因. (2认同)