C++ 在向量中查找相同的记录

c++ finding same record in vector

本文关键字:记录 查找 向量 C++      更新时间:2023-10-16

我有一个包含月年的向量

2013年1月2013年1月2013年1月一月2014一月2014一月2014一月20142014年2月2014年2月

基本上我想做的是搜索向量,对于每个相同的记录,将它们分组一起喜欢例如

total count for Jan2013 = 3; 
total count for Jan2014 = 4; 
total count for Feb2014 = 2;

当然,正如我们所知,我们可以简单地写多个if来解决它

        if(monthyear = "Jan2013")  {
            //add count   
        }
        if(monthyear = "Jan2014")  {
            //add count   
        }
        if(monthyear = "Feb2014")  {
            //add count   
        }

但是程序员不可能以这种方式编写代码。如果有额外的月份年份 2014 年 3 月,2014 年 4 月,2014 年 5 月一直到 2014 年 12 月怎么办以及2015年1月-2015年12月等。

我认为我不应该在从长远来看,并寻找一种更有活力的方法。

我不要求代码,而只是要求一些步骤,也许会给我一些提示,说明我应该研究哪些 c++ 方法。

提前致谢

您可以使用

std::map .例如

std::map<std::string, size_t> m;
for ( const std::string &s : v ) ++m[s];

我可能会做一个std::map<monthyear, int>.对于矢量的每个成员,递增地图的该成员。

只是为了完整性:@VladfromMoscow的解决方案最适合您对输入知之甚少的一般情况。对于长度为 N 的输入来说,它的复杂性O(N log N)

等效地,您可以先在 O(N log N) 中对输入进行排序,然后O(N)遍历排序的输入并将计数存储在std::vector<std::pair<std::string, int>>中。

但是,如果您有关于输入范围的先验信息(假设您确定它从 2013 年 1 月运行到 2014 年 1 月),您也可以直接运行您的输入并以O(N)复杂性更新预分配的std::vector<std::pair<std::string, int>>