c++ - 带有计数器 C++ 的字符串 vector

标签 c++ vector counter

<分区>

我正在输入一个字 rune 件,每个单词在 vector 中都有自己的位置。然后我需要跟踪每个单词并找出每个唯一单词出现了多少次,这样:

一共有三棵树树

应该输出:

有 1 是 1 三个 1 树木 3

我想知道如何使用字符串 vector 来记录每个单词。 我会做一个字符串 vector ,每个字符串都有一个 int vector 吗?

最佳答案

不要用 Screwdriver 钉钉子。 std::vector , 对于这项任务的最基本形式并不是特别有用:简单的频率计算。来自标准输入的任意输入最好利用关联容器,其中键是输入字符串,值是累积频率。

无序频率计算

无序映射类, std::unordered_map , 键入 std::string并映射到该字符串的频率计数器,可用于跟踪基本频率。例如:

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>

int main()
{
    std::unordered_map<std::string, unsigned> m;
    std::string word;
    while (std::cin >> word)
        ++m[word]; // increment the count for this word

    for (auto const& pr : m)
        std::cout << pr.first << ':' << pr.second << '\n';
}

字典顺序频率

注意:使用关联容器没有特定的顺序 std::unordered_map (由此得名)。如果您需要字典顺序,您可以简单地使用常规 std::map .比如:

#include <iostream>
#include <vector>
#include <string>
#include <map>

int main()
{
    std::map<std::string, unsigned> m;
    std::string word;
    while (std::cin >> word)
        ++m[word];

    for (auto const& pr : m)
        std::cout << pr.first << ':' << pr.second << '\n';
}

位置保留频率计算

在计算频率计数器的同时维护输入流中单词出现的位置也是可能的,并且只需要多一点代码。像我们之前所做的那样选择无序或有序的关联容器,而不是映射到 unsigned , 我们映射到 std::vector<unsigned> ,我们在消耗输入词时累积一个词计数器。每个 vector 的总体大小仍然保留频率计数器,但 vector 本身保留输入流中关联词出现的位置。例如:

#include <iostream>
#include <vector>
#include <string>
#include <map>

int main()
{
    std::map<std::string, std::vector<unsigned int>> m;
    std::string word;
    unsigned ctr = 0;
    while (std::cin >> word)
        m[word].push_back(++ctr);

    for (auto const& pr : m)
    {
        std::cout << pr.first << ':' << pr.second.size() << " { ";
        for (auto pos : pr.second)
            std::cout << pos << ' ';
        std::cout << "}\n";
    }
}

这将产生以下形式的输出:

word : frequency { n1 n2 n3... }

哪里word是一个不同的词,frequency是输入流中的总频率,n1,n2,n3,...是单词在处理过程中出现的位置(从 1 开始)。

希望其中一种方法有用。

关于c++ - 带有计数器 C++ 的字符串 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46162286/

相关文章:

c++ - C++仿函数的优势比较

c++ - 从 vector 错误 C++ 中删除元素

arrays - 如何在 Haskell 中滚动快速 BVH 表示

c++ - 在 C++ 中对这些独立但相关的序列进行排序的简洁方法是什么?

Python DictWriter : why won't python quickly return my output file? 使用计数器、csv 和 group-by

具有最大值和最小值的 jQuery 计数器

php - 使用基于图像的点击计数器获取访客信息

c++ - 如何使用 VS Debugger 找出模板参数的类型?

c++ - 未解析的外部符号

c++ - 常量和枚举