2016-01-22 68 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/W/CPP /集裝箱/ unordered_map)? –

回答

2

你基本上使用arr [x]作爲std::map<int,int>。數組的索引目前是您的密鑰,您正在存儲數字。

使用map並將值放入,因爲您發現它們。喜歡的東西:

encounteredNumbers[key]++; 

std::unordered_mapstd::map都在這裏工作,choosing between them

+0

感謝隊友的工作,但每當輸入的數字被輸入之前,它不計算新的我猜。我認爲multimap是爲此目的而創建的,但我無法將其實現到我的代碼中。 map intmap; intmap [x] ++; 這工作,但這並沒有。 multimap intmap; intmap [x] ++; –

+1

你在答案中的全部內容可以縮短爲'encounterNumbers [key] ++;'。 –

+0

@ K.Yazoglu它的工作原理是count()返回1,如果該值已經輸入,則返回0,否則返回0。此代碼僅用於輸入數據。它不會計算出現次數。你必須在後面的一段代碼中自己做這件事。 –

相關問題