• 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.

Object Storage Arubacloud
0 głosów
2,322 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 485 wizyt
0 głosów
1 odpowiedź 469 wizyt

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...