C++ 什么是C++;我应该为频率图选择容器吗?

C++ 什么是C++;我应该为频率图选择容器吗?,c++,containers,frequency,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 key和map

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

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 key和map
如何访问keyAndMap中的向量? 因为我不知何故不能执行
keyAndMap.insert(std::make_pair(bAxis,bVec.push_back(bValue))
我认为主要的问题是如何为std::map中的每个键生成唯一的向量

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)));
}
const int trys=21;
std::矢量值;
std::mapkeyAndMap;
for(int i=1;i
虽然如果我不知何故通过了这条线,我这里的逻辑是有缺陷的,因为向量对于每个键不是唯一的。 我画的这个漂亮的小图中的每个“x”都是通过循环中的每个过程获得的。 因此,对于每个b轴(2,4,6,7和9),应该在它们自己的std::vector中

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

一个可能的容器是
std::map
,这两个容器的类型都是
int
,另外还有一个好处,就是可以对值进行排序。然后,您可以简单地通过以下方式读取值:

std::map<int, int> data;

int key;
while (std::cin >> key)
{
    ++data[key]; // increment the frequency of a given key*
}
它将打印一个两列的数据表

第二,更简单的方法: 您可以使用
std::vector
,其中
frequency
类型为
int
,您的数据将是
std::vector
的索引,但是,您应该知道数据的范围**,以便可以将其用作初始向量大小: i、 e.
std::vector 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;  
} 
std::向量数据(5,0);//初始值为0的五个元素
int键;
while(std::cin>>key)//假设key>=0&&key<5
{
数据[键]+=1;
} 
然后打印:

for (int i= 0; i < data.size(); ++i)
{
    std::cout << i <<": "<< data[i] <<"\n";
}
for(int i=0;istd::cout听起来像是你想要一个
std::map
请求代码通常是不受欢迎的。而且我发现有点不清楚到底是什么问题或标准是什么?一个简单的
std::vector
?或者一个
std::map
?你只给我们看了一张图片。你没有给出实际数据的信息您需要保留/记录的项目。a和b的可能范围是什么?如果有疑问,请选择
std::vector
。只有当您有真正的理由认为这不起作用时,才寻找替代方案。经验法则很好。
for (int i= 0; i < data.size(); ++i)
{
    std::cout << i <<": "<< data[i] <<"\n";
}