我们有一个map<boost::shared_ptr<service>, rules> service_map
where 规则
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 以加快软搜索的最佳方法是什么,以及如何实现这种搜索?