У нас есть map<boost::shared_ptr<service>, rules> service_map
, где правила
struct rules
{
boost::unordered_multimap<string, string> set_of_rules_1;
boost::unordered_multimap<string, string> set_of_rules_2;
}
В моем случае правила - это пары из запросов http headers
и arguments
, например, в одном таком unordered_multimap мы можем найти Accept-Language : FR
и Accept-Language : US
.
Каждый boost::shared_ptr<service>
является некоторым экземпляром класса, который наследуется от service class
.
Я заполняю эту карту правил обслуживания <-> на лету службами и правилами (из некоторых общих библиотек и некоторых текстовых файлов с правилами).
Теперь мне даны случаи data
struct data
{
map<string, string> headers;
map<string, string> arguments;
}
Для каждого данного data
объекта мне нужно найти наиболее подходящий service
из service_map
и вызвать его service->inherited_method();
Под релевантным здесь подразумевается тот, чьи правила в основном соответствуют заданным данным. Например, если мы имеем в правилах Accept-Language : FR
и Accept-Language : US
, то если данные содержат пару Accept-Language : fr-FR,ru;q=0.8,en-US;q=0.6,en;q=0.4
, мы думаем, что это уместно.
Каков наилучший способ предварительной обработки моего service_map для более быстрого мягкого поиска и как реализовать такой поиск?