如何创建矢量<矢量的直方图<long>>
how can i create histogram of vector<vector<long>>
我已经分配了vector<vector<long>>
。创建直方图或使用std::查找所有矢量而不重新定位数据的正确方法是什么?
感谢
根据直方图,我理解映射值->的出现次数,根据您的数据,这意味着map<int, int>
,我不明白std::find是如何起作用的
// assuming exists vector<vector<long<long>>
std::map<long, int> histogram ;
for (const auto &v1 : vect)
for (auto value : v1)
{
auto it = histogram.find(value) ;
if (it == histogram.end())
histogram[value] = 1 ;
else
it->second++ ;
}
根据注释,您需要一种方法来收集运行时收集的向量中的所有值,并跟踪每个值的数量。幸运的是,有几种标准算法和容器可以有效地处理这项任务。
std::unordered_map<long,unsigned int> histogram;
std::for_each(data.begin(), data.end(), [&histogram=histogram](std::vector<long>& inner_vec)
{
for(long val : inner_vec)
{
++histogram[val];
}
});
你确实提到,你正在处理的向量数量可能很大。这个问题可以很容易地退出,从而提供给多线程解决方案。
最初的尝试可能是让每个线程都有自己的std::unordered_map<long,unsigned int>
,并跟踪较大数据集的子集的计数,然后在所有线程完成时将结果合并回较大的histogram
。
下面是一个演示上面描述的每种方法的现场演示。您应该使用优化设置编译所有这些,以真正了解这对您的工作速度,并衡量多线程解决方案是否有好处。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中