我有一个包含monthyear的载体
Jan2013 Jan2013 Jan2013 Jan2014 Jan2014 Jan2014 Jan2014 Feb2014 Feb2014
基本上我想要做的是搜索向量,对于每个相同的记录,对它们进行分组 一起喜欢 例如
total count for Jan2013 = 3;
total count for Jan2014 = 4;
total count for Feb2014 = 2;
当然,正如我们所知,我们只需编写多个if if to solve it
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 ++方法的提示。
提前致谢
答案 0 :(得分:10)
您可以使用std::map
。例如
std::map<std::string, size_t> m;
for ( const std::string &s : v ) ++m[s];
答案 1 :(得分:5)
我可能会做std::map<monthyear, int>
。对于向量的每个成员,递增该成员的地图。
答案 2 :(得分:1)
为了完整起见:@VladfromMoscow的解决方案对于您对输入知之甚少的一般情况是最佳的。对于长度为O(N log N)
的输入,其复杂度为N
。
同样,您可以先在O(N log N)
中对输入进行排序,然后在排序的输入上迭代O(N)
并将计数存储在std::vector<std::pair<std::string, int>>
中。
但是,如果您有关于输入范围的先验信息(比如说确定它从2013年1月开始运行到2014年1月),您还可以直接运行您的输入并更新std::vector<std::pair<std::string, int>>
复杂度中预先分配的O(N)
。