它真正检查的是contains()而不是发生次数,对吧?不允许重复,所以不会包含()是比count()更好的名称吗?为什么命名C++ STL集合的容器的count()方法?
回答
这是为了使其与其他容器类一致,因为多态性的一个重要方面是能够使用相同的API处理不同的类。
它确实实际上返回计数。计数只能为零或一个集合的事实不会改变该方面。
它不是从根本上说不同于一个集合对象,它只允许每个“值”在同一时间的两件事情。在这种情况下,它会返回零个,一个或两个计数,但它仍然是一个计数,与一个集合相同。
标准的相关部分需要,这是C++11 23.2.4
其中谈到了关联容器set
,multiset
,map
和multimap
。表102包含这些关联容器之上为“常规”的容器的要求的要求,以及用于count
位如下转述:
size_type a.count(k)
- 返回与键相当于k
元件的数量。复杂性是log(a.size()) + a.count(k)
。
这是容器的标准操作,返回匹配元素的数量。在像列表这样的事情上,这是非常有意义的。恰巧恰巧在一组中,只能出现一次元素,因此count
永远不会返回大于1的值。
“在像列表这样的事情中,这非常合理。”但是std :: list没有计数方法。 – StackedCrooked 2013-05-14 04:50:24
你是对的。我真的只是在尝试命名另一种容器类型,而不是专门在STL中进行操作;相反,只是*任何可以设想有'count'方法的类型。 @paxdiablo提到了很多特定的容器,它们都有一个计数方法。 – Gian 2013-05-14 05:01:38
所有关联容器都必须符合§23.2.4/ 8中列出的要求表102 - 关联容器要求。其中之一是,他们实现a.count(k)
然后
返回到K的等效键元件的数量
所以原因是让所有关联容器之间的一致的界面。例如,编写必须与任何关联容器一起工作的通用函数模板时,这种一致性将非常重要。
- 1. 为什么在C++ STL中分离算法,迭代器和容器STL
- 2. 为什么C++ STL映射容器O(log(n))的复杂性?
- 3. STL“rdbuf”方法名称代表什么?
- 4. C++ STL容器
- 5. 什么是stl集合的C#等价物?
- 6. 为什么这些C++ STL无序集合被认为是相等的?
- 7. 该方法命名为什么?
- 8. 什么库包含地图STL集合?
- 9. 返回元素集合的Java方法的正确命名约定是什么?
- 10. STL中的容器C++
- 11. STL - 复制混合容器
- 12. STL:容器的容器
- 13. C#中可观察集合中Count和Count()之间的区别是什么?
- 14. C++ STL集合差异
- 15. C++ STL集合使用
- 16. 为STL兼容序列容器的实现命名一个很好的指南)
- 17. 什么是快速查找最好的c + + stl容器?
- 18. C++ STL集合和C#集合的比较?
- 19. 为什么Java集合不提供方便的映射方法?
- 20. 为什么mongodb update方法创建一个扩展名为'_keys'的新集合?
- 21. 名称为'count'的Count列返回多行。为什么?
- 22. 在C++中有超过1个排序方法的STL容器
- 23. STL容器中value_type的用法是什么?
- 24. 为什么java.lang.Thread.join()方法的命名方式如此?
- 25. stl兼容的容器
- 26. Eclipse CDT无法解析STL容器中元素的方法
- 27. 为什么命名为Select的LINQ“apply-to-all”方法?
- 28. 为什么C++ STL不提供一组线程安全的容器?
- 29. 为什么git无法合并具有修改的重命名?
- 30. 命名方法和命名函数的定义是什么?
是的,它有点令人困惑,因为set :: count()实际上做了'contains'的工作。可能出于历史原因。 – taocp 2013-05-14 04:09:27
我认为这是匹配['multiset'](http://en.cppreference.com/w/cpp/container/multiset)接口,其中可能有重复(因此'count()'可以返回> 1 )。虽然不是积极的。 – Xymostech 2013-05-14 04:13:00
Blah blah一致性这是一个愚蠢的名字! – Nils 2014-01-08 13:05:48