我的矢量为strings
:
std::vector<std::string> data;
我需要一个返回std::map<std::string, int>
的algorihtm,将std::string
中的每个不同data
及其多重性(data
中重复出现的次数)存储在其中。< / p>
这是在C ++标准库中实现的吗?在哪里?
如果不是,你能提出一个有效的算法吗?
评论:这相当于Counter
在Python中的作用。我正在寻找一个C ++实现。
答案 0 :(得分:4)
你可以写
std::vector<std::string> data;
std::map<std::string, int> m;
//...
for ( const std::string &s : data ) ++m[s];
答案 1 :(得分:1)
#include <iostream>
#include <vector>
#include <string>
#include <map>
std::map<std::string, int> counts(const std::vector<std::string>& v)
{
std::map<std::string, int> result;
for (auto const& s : v) {
++result[s];
}
return result;
}
int main()
{
auto m = counts({"a", "a", "b", "c", "c", "c" });
for (auto const& e : m)
{
std::cout << e.first << " : " << e.second << std::endl;
}
return 0;
}
预期结果:
a : 2
b : 1
c : 3
说明:
使用std :: map&lt;&gt;,operator [k]将搜索地图匹配键k中的项目。如果未找到,则将(k,v)插入到映射中,其中v是默认初始化值V.在任何一种情况下,无论是否找到,都返回对应于k的V的引用。