C++ 有序集合/映射的计数函数
C++ 有序集合/映射的计数函数,c++,stl,C++,Stl,container.count(val)-给出容器中“val”的频率。为什么计数需要遍历到有序集中每个值“val”的末尾。我的观点是,对于有序集合/映射,元素将是有序的,因此我们甚至可以在到达终点之前获得count的最终值。我理解,这不适用于其他容器(列表、向量等) 示例:- set<int, less<int>> s{1, 2, 3, 4, 5, 6}; int cnt = s.count(2); // return 1 集s{1,2,3,4,5,6}; int c
container.count(val)
-给出容器中“val”的频率。为什么计数需要遍历到有序集中每个值“val”的末尾。我的观点是,对于有序集合/映射,元素将是有序的,因此我们甚至可以在到达终点之前获得count的最终值。我理解,这不适用于其他容器(列表、向量等)
示例:-
set<int, less<int>> s{1, 2, 3, 4, 5, 6};
int cnt = s.count(2); // return 1
集s{1,2,3,4,5,6};
int cnt=s.count(2);//返回1
由于set/map的计数可以是0或1,所以一旦我达到2,它就应该中断循环,而不是一直遍历到结束。此外,编译器知道比较器(小于或大于)。对于multiset/multimap也可以这样做,唯一的区别是计数可以大于1。来自第848页第23.2.6节
关联容器要求
表达式:b.count(k)
返回类型:
size\u类型
断言/注意/前置/后置条件:返回键等于
k
复杂性:
log(b.size())+b.count(k)
这意味着,根据定义,在决定
k
的计数之前,这些函数无法对容器的每个元素进行计数。我确信std::set
或std::map
的(及其多个版本)具有优化的计数()
这与您认为的不一样。@SamVarshavchik这是算法函数,但不确定set/map成员函数及其实现方式。该链接与map的count()
方法完全无关。这是一个独立的
。这里有一个泛型算法,用于迭代器定义的任意序列,以及C++库中的类名称相同的方法。@ SAMVARSHIVCHIK,这是我在前面的评论中所说的,我找不到SET/MAP的成员函数计数,因此推测它是否以这种方式实现?标准保证<代码> log(b siz())+b.count(k)用于std::map::count(k)
和std::set::count(k)
。