容器中的元素多重性?

时间:2016-03-15 14:35:34

标签: c++ dictionary vector stl

我的矢量为strings

std::vector<std::string> data;

我需要一个返回std::map<std::string, int>的algorihtm,将std::string中的每个不同data及其多重性(data中重复出现的次数)存储在其中。< / p>

这是在C ++标准库中实现的吗?在哪里?

如果不是,你能提出一个有效的算法吗?

评论:这相当于Counter在Python中的作用。我正在寻找一个C ++实现。

2 个答案:

答案 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的引用。