【发布时间】:2011-07-09 13:30:00
【问题描述】:
我们有一个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_map 中找到最相关的service 并调用它的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 以加快软搜索的最佳方法是什么,以及如何实现这种搜索?
【问题讨论】:
-
这只是关于 Accept-Language,还是您尝试匹配的其他维度?少谈 C++ 细节,多谈实际概念和预期数据变化会非常有用。
标签: c++ search boost unordered