How do I count the number of occurrences in an array?

26,252

Use a std::map to map integers to their counts.

std::map<int, int> counts;
for (int i = 0; i < 5; i++) {
    counts[myArray[i]]++; // increment the counter for the current value
}

Now you can print the keys and values in counts. See How to loop through a C++ map of maps? for how to do this.

You can do it with an array instead of a map. The only difference is that it won't automatically expand to handle larger values (unless you use malloc and realloc to make it dynamically sized).

#define MAX_VALUE 9
int counts[MAX_VALUE+1] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (int i = 0; i < ARRAY_SIZE; i++) {
    if (myArray[i] <= MAX_VALUE) {
        counts[myArray[i]]++; // increment the counter for the current value
    }
}
for (int j = 0; j <= MAX_VALUE; j++) {
    cout << "Number: " << j << "Number of Occurances: " << counts[j] << endl;
}
Share:
26,252
zachbugay
Author by

zachbugay

Updated on July 09, 2022

Comments

  • zachbugay
    zachbugay almost 2 years

    I have generated an array of 5 random integers from 1-5. Here is what the array looks like now: myArray[5] = {3, 3, 1, 4, 5}

    I have now sorted the array of 5 integers in ascending order, from least to greatest.

    myArray[5] = {1, 3, 3, 4, 5}

    I now need to count the number of occurrences a specific integer has and make a table of it.

    Such as:

    Number: Count: 
    1:1 
    2:0 
    3:3 
    4:0 
    5:1
    

    The farthest I've gotten has been looping through the array. I am having a hard time talling the numbers and creating a count of how many occurances there are.

    Not using any maps, or iterations, etc. I am trying to get this count. Here is what I have tried already:

    int counts[10];
    
    for (int x = 0; x <= 10; x++){
        int counter = 0;
        for (int j = 0; j < ARRAY_SIZE; j++){
            if (x == myArray[j]){
                counts[x] == counter++;
            }
        }
    
        cout << "Number: " << x << "Number of Occurances: " << counts[counter]<< "\n";
    }
    

    However, my output is incredibly wrong.