我想知道在C ++中是否可以解析数组并检索整数出现在数组中的次数。我试图制作值的直方图,但目前我仍然坚持如何继续。
这是一个一维数组,如果这很重要,我正在使用这个函数来打印数组:
void print(int a[], int n)
{
int j = 1;
cout << endl;
for(int i=0; i < n; i++)
{
if(!(j%6))
{
j=1; cout << endl << endl;
}
cout << right << setw(2) << a[i] << " ";
++j;
}
}
在这个屏幕截图中给出了正确的输出:
http://i.imgur.com/P8Jzj1V.png
然而,一旦我进入直方图功能(我知道编码不正确),我得到以下输出:
http://i.imgur.com/WJtBjoF.png
因为使用我当前的代码,它是根据从数组中获取的值打印星号:
for (int i = 0; i < size; i++)
{
cout << a[i] << ":" << bar(a[i-1]);
cout << endl;
}
P.S。 - &#34; bar&#34; function只返回一个指定数量为&#39; *&#39;的字符串。根据给出的数字。
我知道最后一点是不正确的,但那是我试图解决的问题。
答案 0 :(得分:1)
有两种简单的方法:
std::unordered_map<int,int>
大小为2 ** sizeof(int)*CHAR_BIT
的数组非常大。
答案 1 :(得分:0)
让我们看看。您可以使用每个元素的计数来保存地图,每个元素都是地图的关键字:
for (int i = 0; i < size; i++)
{
int current = a[i];
//if it doesn't find it it returns
if (countMap.find(current) != countMap.end())end()
{
countMap[current]++;
} else
{
countMap[current] = 1;
}
}
我不知道语法是否完全正确,但是这样的东西会让你得到你想要的东西。
答案 2 :(得分:0)
想出来。
int tempVal = 0;
int tempTwo = 0;
int counter = 0;
for (int i = 0; i < size; i++) // Checks for histogram output
{
tempVal = a[i];
for (int j = 0; j < size; j++)
{
if(a[j] == tempVal)
{
counter += 1;
}
}
if(tempVal != tempTwo)
cout << setw(3) << tempVal << " : " << bar(counter) << endl;
tempTwo = tempVal;
counter = 0;
}