如何创建矢量<矢量的直方图<long>>

how can i create histogram of vector<vector<long>>

本文关键字:gt lt 直方图 long 何创建 创建      更新时间:2023-10-16

我已经分配了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

下面是一个演示上面描述的每种方法的现场演示。您应该使用优化设置编译所有这些,以真正了解这对您的工作速度,并衡量多线程解决方案是否有好处。