有序集/映射的计数功能

时间:2016-12-16 14:51:07

标签: c++ stl

container.count(val) - 给出" val"的频率。在容器中。为什么计数需要遍历每个值" val"在有序集。我的观点是有序的集合/映射,元素将按顺序排列,因此我们甚至可以在到达结束之前获得最终的计数值。据我所知,这并不适用于其他容器(列表,矢量等)。

示例: -

set<int, less<int>> s{1, 2, 3, 4, 5, 6};
int cnt = s.count(2);  // return 1

由于set / map可以计为0或1,一旦我达到2,它应该打破循环而不是遍历直到结束。此外,编译器知道比较器(更少或更多)。对于multiset / multimap也可以做同样的事情,唯一的区别是count可以是> 1。

1 个答案:

答案 0 :(得分:2)

来自n4618,§23.2.6,第848页

关联容器要求

  

表达:b.count(k)
  退货类型:size_type
  断言/注释/前/后条件:返回元素的数量,其键数等于k
  复杂性:log(b.size()) + b.count(k)

这意味着,根据定义,在决定k的计数是什么之前,这些函数不能计算容器的每个元素。