部分、完全或 RegEx 匹配这些字符串中的任何一个,并随后返回对象列表
好吧,对于完全匹配,你可以有一个std::map<std::string, std::vector<object*> >
. 键将是确切的字符串,并且vector
保存指向匹配对象的指针,其中许多指针可能指向单个对象实例。
你可以有一个从部分字符串到完整字符串的前端映射:假设字符串是“dogged”,你不得不为“dogged”、“ogged”、“gged”、“ged”、“ ed" 和 "d" (如果您想要最小匹配大小,请在任何地方停止)...然后使用 lower_bound 进行搜索。这样,假设您搜索“dog”,您仍然可以看到匹配“dogged”(它是否匹配说“dogfood”并不重要。这将是一个简单的std::map<string, string>
。当您从 lower_bound 向前递增时位置并且字符串仍然匹配(即从 dogfood 到 dogged to ... 直到它不以 dog 开头),您可以在“精确匹配”映射中搜索并汇总结果。
对于正则表达式,我没有什么好的建议……我将从暴力搜索所有完整字符串开始。如果它真的不够好,那么你会做一些粗略的优化,比如在进行蛮力匹配之前检查要过滤的常量子字符串,但我无法想象如何非常彻底和快速地做到这一点。
object*
(如果有用,用你最喜欢的智能指针替换s)