Removing things that occur once only from an array

I wonder if there is a better way…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <vector>
#include <map>
 
using namespace std;
 
 
void remonce(vector<int> &array) {
 
  map<int,int> counts;
 
  for(size_t n=0;n<array.size();n++) {
    counts[array[n]]++;
  }
 
  vector<int> newarray;
  for(size_t n=0;n<array.size();n++) {
    if(counts[array[n]] != 1) {
      newarray.push_back(array[n]);
    }
  }
 
  array = newarray;
}
 
int main() {
 
  vector<int> array;
  array.push_back(4);
  array.push_back(4);
  array.push_back(3);
  array.push_back(3);
  array.push_back(8);
  array.push_back(16);
  array.push_back(8);
 
  remonce(array);
 
  for(size_t n=0;n<array.size();n++) {
    cout << array[n] << endl;
  }
}

Leave a Reply