Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

 
 
Alatke vezane za temu Vrste prikaza
Stara 23.9.2012, 21:54   #11
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

@Ivan

Ok. Mada mislim da je kod ocigledan.

Kod:
class random
...
Dosadile mi srand i rand funkcije, a rek'o i da probam ovaj Mersenne Twister generator pa sam to lepo spakovao u klasu.
Klasa ima templejt metodu get overload-ovanu da bih u zavisnosti od tipa argumenata koristio odgovarajuce "distribucije".
Znaci samo integral i floating-point tipovi dolaze u obzir sve ostalo je compile time error.

http://en.cppreference.com/w/cpp/num...t_distribution

Kod:
typedef std::pair<std::size_t, std::size_t> tpnum;
    std::vector<tpnum> numbers;
Imam vektor parova gde prvi element (first) oznacava koliko puta se ponovio neki broj i drugi element (second) oznacava sam taj broj.

Kod:
numbers.resize(N);

        std::for_each(std::begin(numbers), std::end(numbers), [](tpnum& e){
            e = std::make_pair(0u, random::get(0u, 100u));
        });
Prosirujem vektor na velicinu N (koliko brojeva se izvlaci) i inicijalizujem ga. first = 0, second = random 0 - 100.

Kod:
for(auto& it : numbers)
        {
            it.first = std::count_if(std::begin(numbers), std::end(numbers), [&it](const tpnum& e){
                return it.second == e.second;
            });
        }
Broji koliko se koji element ponavlja (tu su i "duplikati") i cuvam tu vrednost za svaki.

Kod:
std::sort(std::begin(numbers), std::end(numbers), [](const tpnum& l, const tpnum& r){
            return l.second > r.second;
        });
Soriram po random brojevima koji su izvuceni da bih u sledecem koraku imao vektor spreman za unique-ifikaciju (std::unique).

Kod:
auto end = std::unique(std::begin(numbers), std::end(numbers), [](const tpnum& l, const tpnum& r){
            return l.second == r.second;
        });
Pozivam std::unique algo i cuvam end iterator da bih znao gde je kraj unikatima.

Kod:
std::sort(std::begin(numbers), end, [](const tpnum& l, const tpnum& r){
            return l.first > r.first;
        });
Sortiram ponovo da bih dobio elemente koje se najvise ponavljaju prvo. Od pocetka do elementa gde pokazuje end iterator.

I na kraju ispisujem prvih F elemenata. Mada moze da se desi da broj unikata bude manji od F-a ali nece fejlovati.
Belphegor je offline   Odgovor sa citatom ove poruke
 

Bookmarks sajtovi

Tagovi
c++, how to, pomoc, programiranje

Alatke vezane za temu
Vrste prikaza
Pregled sa stablom odgovora Pregled sa stablom odgovora

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno



Sva vremena su po Griniču +2 h. Sada je 22:49.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com