c++ - 我应该为频率图选择什么 C++ 容器?

标签 c++ containers frequency

我有一个小项目。我想制作这样的频率图:

a-axis
3|    x
2|`   x        x
1|    x  x     x
0| x  x  x     x
 |`_____________`
   2  4  6  7  9  b-axis

我应该使用什么容器以及如何以最简单的方式实现它。

  • 容器也应记录零值(频率)。

我发现很难正确实现容器。有没有我可以看的示例代码?或者任何人都可以写一个示例供我在这里学习。

更新: 我正在考虑制作 std::map<int,std::vector<int>> keyAndMap 如何访问 keyAndMap 中的 vector ? 因为我不知何故做不到 keyAndMap.insert(std::make_pair<int,std::vector<int>>(bAxis,bVec.push_back(bValue))); 我认为主要的问题是如何为 std::map 中的每个键生成唯一的 vector ?

const int tries = 21;
std::vector<int>values;
std::map<int,std::vector<int>>keyAndMap;
for (int i = 1; i < tries; i++)
{
    int n = i;
    int cycle = calculate(n);
    /*This next line is an error... why?*/
    keyAndMap.insert(std::make_pair<int,std::vector<int>>(cycle,values.push_back(i)));
}

虽然如果我以某种方式通过那条线,我这里的逻辑是有缺陷的,因为 vector 不是每个键唯一的。 我绘制的漂亮小图中的每个“x”都是通过循环中的每次传递获得的。 所以对于每个 b 轴(2、4、6、7 和 9)应该在它们自己的 std::vector 中

最佳答案

What container should I use and how do go about implementing that in the simplest way?

可能的容器是 std::map<key, frequency> , 两者都是 int 类型,具有对您的值进行排序的额外优势。然后你可以简单地通过类似的方式读取值:

std::map<int, int> data;

int key;
while (std::cin >> key)
{
    ++data[key]; // increment the frequency of a given key*
}

To access the data you could use iterators, like so:

for (auto it = data.begin; it != data.end(); ++it)
{
    // iterator to key  
    std::cout << it->first <<": "<< it->second <<"\n";
                              // iterator to frequency
}

这将打印您的数据的两列表。

第二种,更简单的方法:

你可以使用 std::vector<frequency> , 其中frequency类型为 int ,您的数据将是 std::vector 的索引,但是,您应该知道数据的范围**,以便可以将其用作初始 vector 大小: 即 std::vector<int> data(5, 0)可以保存范围 5 的值.

然后,例如,如果您的数据由整数组成:[0, 4],您可以:

std::vector<int> data(5, 0); // five elements with initial value 0

int key;
while(std::cin >> key)  // assuming key >= 0 && key < 5
{
    data[key] += 1;  
} 

然后打印:

for (int i= 0; i < data.size(); ++i)
{
    std::cout << i <<": "<< data[i] <<"\n";
}

* 默认首字母 frequency不同值 key是:0 ,因此您可以简单地使用键来访问和递增元素。

**范围 - 最低值和最高值之间的差异。

关于c++ - 我应该为频率图选择什么 C++ 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961345/

相关文章:

c++ - glfwDestroyWindow 不会关闭窗口

c++ - 努力使用模板化结构选择类型

c++ - 给定一个范围,我必须计算数组中数字的频率。给定的解决方案是否有效?

c++ - 概要分析:一行简单代码的 self 时间与总时间

c++ - 在链表中添加字符串的简单方法

docker - 使用 Docker for windows 将 windows 驱动器卷挂载到 Linux 容器中

html - 包裹元素上的 CSS 容器宽度

qt - 是否有任何Qt容器以逗号分隔的字符串形式返回其值?

r - 如何使用R将频率转换为文本?

python 打印带有常用词或频率词的句子?