获取向量 c++ 中的字符串计数

Getting count of strings in vector c++

本文关键字:字符串 向量 c++ 获取      更新时间:2023-10-16

我有这个向量

vector <string> data
data = ["this is", "data that", "is in", "this is", "vector", "vector", "vector"]

如何获得一个向量(或 2D 数组)来删除重复项,而是具有每个第 i 个条目的计数?

 results = [("this is", 2), ("data that", 1), ("is in", 1), ("vector", 3)]

简单的解决方案是将唯一值及其计数累积到地图中:

std::map<std::string, std::size_t> results;
std::for_each(begin(data), end(data), [&](std::string const& s)
{
    ++results[s];
});

这具有线性(n lg n)的时间复杂度,但由于它必须复制每个不同的字符串值,因此可能相当昂贵。 您还可以就地对列表进行排序,然后计算每个值的数量,如果您具有 std::string 的移动感知实现,这可能会更好地执行。