L'approche la plus simple est probablement la meilleure.
vector<pair<regex,Object>> regexes;
Object* find_it(string looking_for)
{
auto found = find_if(regexes, [&](const pair<regex,Object>& thing)
{
return get<0>(thing).match(looking_for);
}
if(found != regexes.end()) return & get<1>(*found);
return nullptr;
}
Mais, l'approche simple n'est jamais une réponse amusante. Si vous utilisez un Trie, vous pouvez essentiellement rechercher rapidement des regex du style <prefix>.*
. Avec un peu d'imagination, vous serez peut-être capable de trouver du temps pour rechercher des expressions rationnelles un peu plus expressives. Cependant, je doute que vous pourriez transformer un trie pour gérer efficacement les regex générales. Mais ça pourrait être amusant de ... trie :).
Si écrire le prédicat est délicat, pourquoi même suggérer cette solution? –
wow neil plutôt snarky aujourd'hui! es-tu ivre? –
Non. Puis-je m'attendre à ce que vous ou Dan fournisse le prédicat délicat? –