Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有序集合/映射的计数函数_C++_Stl - Fatal编程技术网

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)