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

std::map , std::pair, std::function Wyjasnienie i jakie zastosowanie.

VPS Starter Arubacloud
+3 głosów
618 wizyt
pytanie zadane 28 listopada 2018 w C i C++ przez Poczprogramista123 Bywalec (2,900 p.)
Witam bardzo bym prosil o wytlumaczenie co powyzsze klasy robia i jakie jest ich zastosowanie. Opis w internecie nie dokonca jest jasny a nie ma lepszego wyjasnienia od osoby co opisze to swoimi slowami. Z gory dzieki.

1 odpowiedź

+4 głosów
odpowiedź 28 listopada 2018 przez RafalS VIP (122,820 p.)

Mapa to taka tablica, ktora mozna indeksowac dowolnym typem, np stringiem. Pozwala to na napisanie takiego kodu:

	std::unordered_map<string, string> slownik_en_pl;
	slownik_en_pl["cat"] = "kot";
	slownik_en_pl["dog"] = "pies";
	// itd
	cout << "cat to po polsku: " << slownik_en_pl["cat"] << endl;

Zastosowan jest masa:

	std::unordered_map<char, int> wielkosci_dyskow;
	wielkosci_dyskow['C'] = 1000;
	wielkosci_dyskow['D'] = 328724;

	std::unordered_map<string, double> wyniki_wyborow;
	wyniki_wyborow["andrzej duda"] = 32.4212;
	wyniki_wyborow["JKM"] = 4.76

std::pair to zwykla para liczb. Przydaje sie np gdy chcemy przeiterowac po mapie, gdzie kazdy element ma klucz i wartosc:

	for (std::pair<string, double> wynik : wyniki_wyborow) {
		cout << wynik.first << " zdobyl: " << wynik.second << endl;
	}

Przeważnie nie jest jednak używany, bo zawsze łatwiej jest stworzyć klase składającą się z tych dwóch wartosci, której nazwa mowi jasno co te wartosci oznazcaja.

std::function to takie uogólnienie czegoś co mozna wywołać: funkcja, lambda, metoda. Kilka przykladow jest tutaj:

https://en.cppreference.com/w/cpp/utility/functional/function

komentarz 2 grudnia 2018 przez criss Mędrzec (172,590 p.)
edycja 2 grudnia 2018 przez criss

PS: odnośnie odpowiedzi RafalS. 

Mapa to taka tablica, ktora mozna indeksowac dowolnym typem, np stringiem.

Generalnie std::map jest oparte na strukturze drzewa (red-black tree z reguły). Rozumiem, że to z tablicą to uproszczenie, ale IMHO zbyt duże i mogło być mylące :)

komentarz 2 grudnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
O kurde w zyciu bym nie zgadl. Super dzieki wielkie.
komentarz 2 grudnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Czyzby wlasnie to okresla nam wskaznik this?
komentarz 2 grudnia 2018 przez criss Mędrzec (172,590 p.)

Czyzby wlasnie to okresla nam wskaznik this?

Dokładnie :) 

komentarz 2 grudnia 2018 przez RafalS VIP (122,820 p.)

Generalnie std::map jest oparte na strukturze drzewa (red-black tree z reguły). Rozumiem, że to z tablicą to uproszczenie, ale IMHO zbyt duże i mogło być mylące :)

Serio to mogłoby być mylące dla kogoś kto w ogóle nie wiedział co to jest mapa :D?

Dla laika mapa to od strony użytkowej dosłownie tablica ktorą indeksujesz dowolnym typem, aczkolwiek mówiąc tablica mam na mysli kolekcje elementów, z której można wyciągać elementy kolekcja[indeks], a nie ciągłośc pamięci, ale byłem w stanie splamić moją programistyczną dusze tym bluźnierskim uproszczeniem, żeby czegoś nowych kolegów nauczyć.

To jak to jest zrobione pod spodem pomaga jedynie zrozumieć czemu jakaś operacja jest szybka a druga wolna, ale ide o zakład, że miliony programstów pythona, którzy nie słyszeli ani pół słowa o drzewach BST korzysta ze słowników bez żadnego problemu :P Ignorancji oczywiście nie pochwalam, ale mówię tylko, że ta wiedza nie jest niezbędna do podstawowego korzystania z tej struktury danych.

Podobne pytania

0 głosów
0 odpowiedzi 472 wizyt
pytanie zadane 30 lipca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
3 odpowiedzi 230 wizyt
pytanie zadane 29 lipca 2019 w C i C++ przez amelia.cpp Obywatel (1,860 p.)
0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 7 czerwca 2019 w C i C++ przez BartekSV123 Nowicjusz (240 p.)

92,970 zapytań

141,934 odpowiedzi

321,168 komentarzy

62,299 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...