struktura powłoki bash

struktura powłoki bash
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

Muszę połączyć kilkadziesiąt poleceń które mają być wykonywane w konsoli na wzór basha w sensie że nazwa polecenia, opcje i wszystkie parametry mają być podawane w 1 linii np find C:\ szukany_plik. I teraz jak to widzę - wczytuje komendę do stringa, sprawdzam odpowiednia maską ( boost::regex ), wyciągam ze stringa 1 człon który jest nazwą polecenia, dalej przeszukuje std::vector w którym przechowuje wszystkie polecenia( vector dlatego że oferuje najszybsze wyszukiwanie ) i teraz chciałbym wywołać odpowiednią metodę przekazując jej pozostałe parametry jak w tym przypadku połączyć odpowiednią metodę z nazwą plecenia? przechowywać w vectorze std::pair a w nim nazwę polecenia i wskaźnik na metodę? czy jest lepszy sposób? Prosiłbym o jakieś nakierowanie czy sposób w jaki chce to wykonać jest prawidłowy

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

http://www.cplusplus.com/reference/unordered_map/unordered_map/
http://en.cppreference.com/w/cpp/utility/functional/mem_fn

Polecalbym taka kombinacje. Ew. mem_fn mozesz zastapic jakims wzorcem Command.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

przeszukuje std::vector w którym przechowuje wszystkie polecenia( vector dlatego że oferuje najszybsze wyszukiwanie )

mam nadzieję że żartujesz albo miałeś na myśli std::set albo std::unordered_set...
vector przeszukasz w O(n), set w O(logn) a unordered_set w O(1)...
Wiązanie nazwy z funkcją zrób za pomocą mapy, tak jak napisano wyżej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
EM
w dokumentacji przeczytałem że operacje wstawiania i usuwania w zbiorze są szybsze niż w std::vector ale wyszukiwanie szybciej odbywa się w std::vector dlatego tak napisałem...
n0name_l
@emacs, a zeby przeszukac zwykla tablice, ile operacji musisz wykonac?
Shalom
Pokaż mi gdzie. Pics or it didn't happen. Zresztą warto myśleć a nie ślepo patrzeć na to co gdzieś ktoś napisał...
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

"Dostęp do poszczególnych elementów w std::vector jest szybki - odbywa się w czasie stałym 0(1), w kontenerze set w czasie logarytmicznym 0(log(N)) czyli wolniej niż w vectorze..." I żeby nie było że się kłócę ! ;) Raczej słucham tego co mówią starsi stażem koledzy ;) ale w tym wypadku to co mówicie jest sprzeczne z tym co mówi dokumentacja...

edit ::
rozumiem - jeżeli znam miejsce gdzie znajduje się szukany element to szybszy jest vector ale mylące jest to "Dostęp / wydajność szukania" ;)

edytowany 1x, ostatnio: emacs
n0name_l
ROTFL! Dostep != wyszukiwanie.
EM
Ja mam akurat "Dostęp / wydajność szukania"... tak czy siak 0(1)
Shalom
hashmapa ma zarówno dostęp jak i szukanie O(1)...
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Panie, to ty po prostu nie rozumiesz co czytasz. DOSTĘP to znaczy odwołanie się wektor[1] albo wektor[10]. Tak jak w zwykłej tablicy wykonujesz to w czasie stałym. Ale WYSZUKANIE czegoś w tablicy to jest zupełnie co innego! Żeby sprawdzić czy element znajduje się w tablicy/wektorze musisz przelecieć każdy jej element czyli wykonać O(n) operacji. W zbiorze opartym o drzewo wystarczy O(logn) operacji a w zbiorze opartym o tablicę hashującą O(1). Gdybyś miał posortowany wektor/tablicę to mógłbyś to też zrobić w czasie O(logn) za pomocą szukania połówkowego, ale wstawianie byłoby wtedy bardziej kosztowne.

A potem słucha sie marudzenia studentów "a po co mam się uczyć o tych algorytmach i strukturach danych skoro to już wszystko jest zaimplementowane", a tu sie okazuje że nie dość że ktoś nie wie jak to jest zaimplementowane to jeszcze nie potrafi używać...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
EM
kompletnie nie rozumiem złości w Twojej wypowiedzi ale być może "staży i doświadczeni" programiści tak już mają ;) w każdym razie dziękuje za wyjaśnienie, teraz wiem gdzie był mój błąd ;)
Shalom
Bo próbujesz pisać już nieco większe rzeczy (patrząc po twoich tematach) a brakuje ci absolutnych podstaw! :) A taki "stary" to akurat nie jestem! :P
EM
Przepraszam, palnąłem głupotę i z tego co widzę to masz racje brakuje mi podstaw... więc idę doczytać ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.