C++中数组中的重复计数

C++中数组中的重复计数,c++,arrays,C++,Arrays,例如,我想做一个程序来计算重复了多少个数字 arr1[]={1,2,3,4,5,1,2}输出应该是2,因为数字1和2有重复项 arr2[]={1,1,1,2,2,3,3}输出应该是3,因为数字1,2和3有重复项 我看不到我的问题的具体答案,因为答案总是与计数一起出现,数字在数组中重复了多少次 反正这是我自己的密码 #include <iostream> using namespace std; int main () { int arr[64],n,clamp=0,ctr=

例如,我想做一个程序来计算重复了多少个数字

arr1[]={1,2,3,4,5,1,2}输出应该是2,因为数字1和2有重复项

arr2[]={1,1,1,2,2,3,3}输出应该是3,因为数字1,2和3有重复项

我看不到我的问题的具体答案,因为答案总是与计数一起出现,数字在数组中重复了多少次

反正这是我自己的密码

#include <iostream>

using namespace std;
int main ()
{
    int arr[64],n,clamp=0,ctr=0,maxv = 0;
    cout<<"Enter desired number of element"<<endl;
    cin>>n;
    cout<<"Enter "<<n<<" numbers"<<endl;
    for(int x=0;x<n;x++)
    {
         cin>>arr[x];
    }
    for(int i=0;i<n;i++)
    {
        if(arr[i]>maxv)
        maxv=arr[i];
    }
    for(int y=0;y<=maxv;y++)
    {
        for(int x=0;x<n;x++)
        {
            if(y==arr[x])
            {
                ctr++;
            }
            if(ctr>=2)
            {
                clamp++;
                ctr=0;
                break;
            }
        }
        ctr=0;
    }
    cout<<"The amount of repeated elements is "<<clamp<<endl;
    return 0;
}    

您可能需要使用std::map并检查密钥是否已经在其中。
然后,每次您想要将某个内容推入该索引时,您只需增加该值

如果某个字符已经存在,我会使用一个哈希表std::map来存储:

#include<map>

int GetRepeatingCharacterNumber(int* pArray, int nCount)
{
    std::map<int, int> exists;
    int result = 0;
    for (int i = 0; i < nCount; ++i)
    {
        if (exists.find(pArray[i]) == exists.end())
        {
            //not found
            //add to map
            exists[pArray[i]] = 1;          
        }
        else
        {
            //already in there
            //check if it already counted
            if (exists[pArray[i]] == 1)
            {
                //second time found
                result++;
            }
            exists[pArray[i]] += 1;
        }
    }
    return result;
}
正如其他地方指出的,std::map是最明显的解决方案,但它可以比sebi的答案更简洁地完成

template<typename Iterator,
         typename Compare = std::less<typename std::iterator_traits<Iterator>::value_type> >
size_t max_number_of_repetitions(Iterator begin, const Iterator end)
{
  using key = typename std::iterator_traits<Iterator>::value_type;
  std::map<key, size_t, Compare> rep;
  size_t max_rep = 0;
  for(; begin!=end; ++begin)
    max_rep = std::max(max_rep, ++(rep[*begin]));
  return max_rep;
}

int main()
{
  int arr1 [] = {1,2,3,4,5,1,2};
  int arr2 [] = {1,1,1,2,2,3,3,3};
  std::cout<<max_number_of_repetitions(std::begin(arr1),std::end(arr1))<<'\n'
           <<max_number_of_repetitions(std::begin(arr2),std::end(arr2))<<'\n';
}

排序和检查是否可以接受?您还可以使用hashtableWelcome来处理堆栈溢出。请花时间阅读并参考你在这里所问的内容和你如何问的东西。你不知道你已经找到了一些可能的方法的步骤1?我确实有,但是它们和我在C++中的知识相比进步太大了,这就是为什么我想保持它的简单性,这样我就可以跟踪逻辑,然后再前进到下一步。将使用std::map来实现这一点。它比排序数组更快,编程工作量更少
2
3