2016-01-22 3 views
-2

Я хочу получить информацию о том, сколько раз каждое число повторялось в массиве. Я делал что-то вроде этого:Как получить преобладание каждого числа в массиве?

for (int j = 0; j < n; j++){ 
     cin >> x; 
     arr[x]++; 
    } 

Тогда я понял, что данное число может быть большим, как «521659942». И, очевидно, я не могу создать массив такого размера.

arr[x]++; 

Недействительный. Итак, что я должен сделать, чтобы узнать распространенность каждого числа?

+0

Проверьте свое значение от размера массива первым. – Downvoter

+4

Вы видели ['std :: map'] (http://en.cppreference.com/w/cpp/container/map) или [' std :: unordered_map'] (http://en.cppreference.com/ж/CPP/контейнер/unordered_map)? –

ответ

2

Вы по существу используете arr [x] как std::map<int,int>. Индекс массива - это ваш ключ в настоящее время, против которого вы храните цифры.

Используйте map и введите значения по своему запросу. Что-то вроде:

encounteredNumbers[key]++; 

std::unordered_map и std::map и работы здесь, choosing between them

+0

Спасибо, что он работал, но всякий раз, когда вводится число, которое вводится раньше, оно не считается новым, которое я предполагаю. Я думаю, что для этой цели создана многокамерная программа, но я не смог реализовать ее в своем коде. intmap; intmap [x] ++; Это работает, но это не так. multimap intmap; intmap [x] ++; –

+1

Все, что у вас есть в вашем ответе, может быть сокращено до «встреченныхNumber» [key] ++; '. –

+0

@ K.Yazoglu это работает, так как count() возвращает 1, если значение уже введено, и 0 в противном случае. Этот код предназначен только для ввода данных. Он не учитывает количество вхождений. Вы должны сделать это самостоятельно в более поздней части кода. –

Смежные вопросы