• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[c++]Zliczanie ilości powtórzeń każdego elementu w tablicy.

Mały hosting, OGROMNE możliwości
0 głosów
2,876 wizyt
pytanie zadane 21 stycznia 2018 w C i C++ przez pigmej4ever Nowicjusz (190 p.)

Witam, chciałbym napisać program, który zliczałby wystąpienia każdego elementu w tablicy i zapisywał je w innej tablicy. Dla tablicy o wartościach {10,10,8,10,4,3,4,10,5} miało by to wyglądać jakoś tak:

3   1

4   2

5   1

8   1

10  4

Napisałem taki kod ale zlicza od każdą wartość kilkakrotnie proszę o wskazówki;

int przedzial[MAX-MIN]={0};
    for(int i=0; i <nr_linii;i++)
    {
        for(int j = 0; j <nr_linii;j++)
        {
        if(pomiar[j]==pomiar[i])
        {
            przedzial[i]= przedzial[i]+1;
        }
    }
    }
    for(int i = 0; i <=MAX-MIN;i++)
        cout<<przedzial[i]<<endl;

MIN i MAX to zmienne przechowujące największy i najmniejszy element tablicy, a pomiar to tablica przechowująca elementy.

2 odpowiedzi

0 głosów
odpowiedź 25 stycznia 2018 przez Yoshow Nowicjusz (240 p.)
Daj cały kod ;p
0 głosów
odpowiedź 25 stycznia 2018 przez Aisekai Nałogowiec (42,190 p.)
Zobacz sobie mapy (w javie jest, w c++ z tego co sprawdzałem też). W javie o tyle lepiej, że jest metoda z map getOrDefault(), tutaj musiałbyś sam stworzyć jej implementację (na SO jest).

 

W mapy są stosowane do przechowywania danych w sposob: Klucz,Wartość (key,value) gdzie u Ciebie key to byłaby wartość w tablicy, value ilość wystąpień
komentarz 25 stycznia 2018 przez niezalogowany
Jakie w tym przypadku miałaby zastosowanie funkcja getOrDefault skoro na mapie można użyć pętli po zasięgu(range-based)?
komentarz 25 stycznia 2018 przez Aisekai Nałogowiec (42,190 p.)
Nie wiem jak wygląda to w przypadku C++, mówię znając jave. Ale w javie funkcja getOrDefault zwraca wartość klucza, lub wartość defaultowa jeśli klucz nie istnieje.

Można pobrać wartość danej komórki w tablicy, jeżeli jej nie ma to pobrać wartość default 0, zinkrementowac to i spowrotem put do mapy.  Ew można użyć merge, lub pominąć etap z zapisaniem do zmiennej.
komentarz 25 stycznia 2018 przez niezalogowany

Dzięki za wytłumaczenie ;) Rozumiem na czym polega jej przydatność, ale w tym przypadku chyba wystarczy zrobić coś takiego:

#include <iostream>
#include <map>
#include <vector>

int main()
{
	std::vector<int> array = { 10, 10, 8, 10, 4, 3, 4, 10, 5 };
	std::map<int, size_t> map;
	for (auto& i : array) 
		map[i]++;
	for (auto& p : map) 
		std::cout << p.first << "\t" << p.second << "\n";
}

Podobne pytania

0 głosów
2 odpowiedzi 830 wizyt
0 głosów
1 odpowiedź 832 wizyt

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,259 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...