Approach 1
The easiest way, is not to sort your array, and increment elements of a map:
unordered_map<int, size_t> count; // holds count of each encountered number
for (int i=0; i<number; i++)
count[array[i]]++; // magic !
You can then process the content of the map:
for (auto &e:count) // display the result
cout << e.first <<" : "<<e.second<< "-> "<<e.first/e.second<<endl;
If needed, filter out the non duplicates by rerasing them from the map or ignoring it during the processing.
Approach 2
If you're not allowed to use maps, then you have to elaborate your counting loop, in order to restart counting for each new number, and being able to process consecutive dups also if more than two:
...
for(int i = 0; i < number; i+=counter) {
for (counter=1; i+counter<number && array[i+counter]==array[i]; )
counter++; // count consecutives dups
if (counter>1) { // if more than one, process the dups.
cout << "dup: " << array[i] << " "<<counter<<endl;
}
}
If you need to store the pairs to process them in asecond step, you need to store a pair (preferably in a vector, but if needed in an array):
pair<int, size_t> result[number]; // a vector would be preferable
int nres=0;
...
if (counter>1) { // if more than one, process the dups.
// cout << "dup: " << array[i] << " "<<counter<<endl;
result[nres++] = make_pair(array[i], counter);
}
...
Online demo for both approaches
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…