Przeglądałem słowniki w języku C# i wydają się one bardzo przydatne i zastanawiałem się, czy można ich używać w C++, ponieważ próbowałem wyszukiwać słowniki w C++, ale nie ma wydaje się być odpowiednikiem, który mogę znaleźć. Czy istnieje jakaś biblioteka, którą mogę pobrać i dołączyć do projektu lub czy istnieje funkcja, która robi to samo z inną nazwą.Czy słowniki mogą być używane w języku C++
Odpowiedz
Istnieje odpowiedni typ w STL, który nazywa się std::map
.
Ma taką samą podstawową funkcjonalność jak słownik .NET, ale implementacja jest zupełnie inna. std::map
jest wewnętrznie oparty na strukturze drzewa czerwono-czarnego, natomiast Dictionary
używa wewnętrznie tabeli mieszania.
Jeśli szukasz czegoś o tym samym zachowaniu, zrobi to std::map
, ale jeśli masz duże ilości danych, musisz pamiętać o różnych cechach wydajności.
std::map jest jak Dictionary
.
Istnieje dla logarytmicznego czasu dostępu (zwykle w oparciu o implementację drzewa) i std::unordered_map
(od C++ 11) dla oczekiwanego, stałego, najgorszego przypadku, liniowego czasu dostępu (zwykle w oparciu o implementację mieszania).
Powiedziałbym, że standard wymaga implementacji hashowania dla 'std :: unordered_map', a nawet bardzo specyficznej wersji zarządzania kolizjami. W przeciwnym razie, co oznaczają funkcje takie jak 'bucket_count()' i 'load_factor()'? –
@JamesKanze Rzeczywiście byłoby dość trudno wymyślić inną implementację 'std :: unordered_map'. Chciałem tylko podkreślić, że standard w rzeczywistości nie wymaga szczególnej implementacji, a jedynie "obserwowalne efekty" (w zdrowym tego słowa znaczeniu, a nie w standardowej definicji). – Angew
* zwykle w oparciu o implementację haszowania *: Powiedziałbym, że ponieważ jedynymi predykatami, które są dostarczane są hasz (domyślnie 'std :: hash
- 1. Czy F # TypeProviders mogą być używane w aplikacji Windows Store?
- 2. Czy pseudoelementy mogą być używane samodzielnie w CSS?
- 3. Inline Asembler: Jakie rejestry zarysowania mogą być używane?
- 4. Czy kontrakty Microsoft Code mogą być używane z witryną ASP.NET?
- 5. Czy ładowarki mogą być używane bez dostawcy treści lub kombinacji?
- 6. Czy funkcje obiektu wywołania funkcji mapy Pythona mogą być używane?
- 7. Czy konstruktory C++ mogą być szablonami?
- 8. W jaki sposób argumenty wariancji C++ i C mogą być używane razem?
- 9. Dlaczego Integer i int mogą być używane zamiennie?
- 10. Czy dll wykonane w języku C# być używane w aplikacji golang
- 11. "Protokoły nie mogą być używane z isinstance()" - dlaczego nie?
- 12. Czy blokady i Mutexy w języku C# powinny być używane razem?
- 13. Jakie typy mogą być używane dla członków adnotacji Java?
- 14. Cabal: Co oznacza "tylko zainstalowane już instancje mogą być używane"?
- 15. Czy indeksy tablic mogą być nazwane w C#?
- 16. jakie bazy danych mogą być używane z java?
- 17. Czy dwa identyczne ciągi mogą być dwoma oddzielnymi instancjami w języku C#?
- 18. Czy nazwa właściwości i nazwa metody mogą być takie same w języku C#?
- 19. Czy kombinatory parserów mogą być wydajne?
- 20. Czy mogą istnieć samodzielne funkcje w języku C# bez klasy?
- 21. Czy pliki kluczy prywatnych linuksa ssh mogą być używane w niezmienionej wersji w systemie Windows?
- 22. Czy "@" jest używane w C++?
- 23. Array, które mogą być accesed używając array [ 'name'] w C#
- 24. Sprawdzanie, czy dwa masywne słowniki w języku Python są odpowiednikami
- 25. Czy tablice mogą być indeksowane podczas kompilacji?
- 26. Czy w php są słowniki?
- 27. Czy tymczasowe dane logowania do roli IAM mogą być używane w szablonach Cloudformation?
- 28. Czy rozmiar klas/kolekcja cech w iOS mogą być używane programowo, gdy nie korzystam z Autolayout
- 29. Haskell: Czy zmienne typu mogą być używane w ramach definicji funkcji?
- 30. Czy testy ABAP UNIT mogą być używane w klasycznych programach ABAP?
unordered_map :) – NoSenseEtAl
'std :: unordered_map' implementuje funkcjonalność słownika przy użyciu tabeli mieszania (jak C# 's' Dictionary') --__ IF__ masz C++ 11 –
@SchighSchagh: dobrze, zawsze jest 'boost :: unordered_map "inaczej;) –