Io sfrutterei la map.

Spero che non verrò tritato dagli utenti esperti per l'algoritmo che sto per proporre , ma la map ha una caratteristica interessante.
Quando accedi ad una chiave che non esiste, la crea e inizializza il valore con il suo default.

Perciò, quando dichiari una map<int,int> (chiave intera, valori interi) e provi ad accedere alla map con una chiave che non esiste, il valore corrispondente viene creato col costruttore di default, che per gli interi è int(0).

Quindi ti basta fare un ciclo che scorra tutta la matrice, e ad ogni elemento della matrice incrementare il suo contatore, così:

codice:
 mappa_contatori[ matrice[i][j] ] += 1;
Una volta che hai scorso la matrice, avrai come chiavi della mappa tutti i numeri presenti nella matrice e come valori il numero di volte che ognuno di questi appare nella matrice.
A questo punto ti basta cercare la chiave a cui è associato il valore più grande.