部分,正好,或正則表達式匹配任何一個這些字符串,並隨後返回對象的列表
那麼,對於完全匹配,你可以有一個std::map<std::string, std::vector<object*> >
。關鍵將是確切的字符串,並且vector
保存指向匹配對象的指針,其中許多指針可能指向單個對象實例。
您可以從部分字符串到完整字符串的前端映射表示:如果字符串是「頑固」的,那麼您很遺憾必須將條目放入「已修復」,「已ogged」,「gged」,「 ged「,」ed「和」d「(如果您想要最小匹配大小,則停在任何你喜歡的地方)...然後使用lower_bound進行搜索。這樣,如果你搜索「狗」,你仍然可以看到有一個「頑強」的匹配(不要緊,如果它匹配說'狗食',這將是一個簡單的std::map<string, string>
。 lower_bound的位置和字符串仍然匹配(即從dogfood到dogged到......直到它不以狗開始),則可以在「完全匹配」映射中搜索該結果並彙總結果。
對於正則表達式,我沒有什麼好的建議......我首先在所有完整的字符串中進行強力搜索,如果它不夠好,那麼你會做一些粗略的優化,比如檢查一個常量子字符串,蠻力匹配,但它超出我想象如何做到這一點非常徹底和快速。(代替您最喜歡的智能指針爲object*
■如果有用)