Portál AbcLinuxu, 29. října 2025 16:23
Řešení dotazu:
#include <iostream>
#include <string>
#include <map>
typedef std::map<std::string, std::string> osoba_t;
int main()
{
osoba_t osoba;
osoba["adresa"] = "mars colony";
osoba["jmeno"] = "Douglas Quaid";
std::cout << "jmeno = " << osoba["jmeno"] << ", adresa = " << osoba["adresa"] << "\n";
}
Pokud bys těch osob měl pár tisíc a chtěl to mít opravdu hezky, asi by stálo za to si udělat index, kde by byla hodnota, v jaké položce je a pointer na osobu do toho pole. Tan index by byl seřazen podle hodnoty a pomocí bsearch bys po tom pobíhal.s binarnim vyhledavanim bych byl opatrnej. Ono ma sice lepsi asymptotickou slozitost, ale pro maly n je pomalejsi. Hlavni duvod je pravdepodobne obtizna predikce skoku. Kdysi jsem s tim delal nejaky pokusy a binarni vyhledavani bylo rychlejsi nez sequencni hledani az pri asi n > 30 Pokud bych chtel max rychlost tak bych to udelal nejak takhle:
struct osoba_t
{
char *jmeno;
char *adresa;
...
}
char *najdi_pole(osoba_t *o, char *pole)
{
if (!strcmp(pole, "jmeno")) { return o->jmeno; }
else if (!strcmp(pole, "adresa")) { return o->adresa; }
else { ... }
}
takhle bude mit vyhledavani v jedny funkci takze tam nebude zadna redundance a pokud v ty strukture nema moc polozek tak to bude i rychly.
Ty if-y navic muze seradit tak aby ty nejcastejsi byly na zacatku.
Pokud bys těch osob měl pár tisíc a chtěl to mít opravdu hezky...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.