Portál AbcLinuxu, 10. května 2025 02:22
Řešení dotazu:
typedef int (*funkce_t)();
struct {
char *jmeno;
funkce_t funkce;
} seznam[] = {
{
"haf", stekej,
},
};
a nasledne prochazet tohle a volat podle toho... je to teda spis C nez C++, ale hadam ze se to az tak lisit nebude (C++ se mozna nebude libit to deklarovani a definovani struktury i promenne v jednom)
std::map<std::string, void*>
std::map
nebývá hašovací tabulka. std::unordered_map
bývá.
void*No klidně bych tam spíš rval std::function<void()>, může to pak být i volání nějaký metody nějakýho objektu, lambda, ...
#include <iostream> #include <map> #include <unordered_map> #include <functional> #include <string> void stekej() { std::cout << "haf" << std::endl; } void mnoukej() { std::cout << "mňau" << std::endl; } class Jardik { public: void jardikuj(std::string const& oCem) { std::cout << "Jardíkuju o " << oCem << std::endl; } }; using Mapa = std::unordered_map<std::string, std::function<void()>>; //using Mapa = std::map<std::string, std::function<void()>>; int main(int argc, char **argv) { Jardik jardik; Mapa mapa{ {"haf", stekej}, {"mňau", mnoukej}, {"jardikujo64bitech", std::bind(&Jardik::jardikuj, &jardik, "64bitech")}, {"jardikujowindows", std::bind(&Jardik::jardikuj, &jardik, "woknech")} }; std::string codelat; for (;;) { std::cin >> codelat; if (!std::cin) break; Mapa::const_iterator it = mapa.find(codelat); if (it != mapa.end()) { it->second(); } else { std::cout << "Neumim" << std::endl; } } return 0; }
gcc 4.7 a 4.8 dle distrowatch ...
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.8#pkgsearch
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.7#pkgsearch
a c11 v clangu : http://clang.llvm.org/cxx_status.html
using
, pokud se opraví na typedef a přidá se flag -std=gnu++0x
uklidňujícně označený jako „This support is currently experimental.“ tak už jo.>>
za sebou bez mezery), pominulu-li std::bind
.což je asi nejefektivnější datová struktura pro tento účelPokud na vstupu budou vždy pouze slova z předem dané množiny, pak ta slova nepotřebuji ani ukládat. Jednoduchý benchmark je v článku GPERF: A Perfect Hash Function Generator na straně 10.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.