拥有带有路径的地图如何将其与给定路径进行比较?
我们有 boost 路径到字符串对的映射,例如 name:location (绝对位置路径,如 usr/myfolder/
)。我们获得了 usr/myfolder/mysubfolder/myfile
中的某个位置。如何找到哪个地图位置最适合给定的网址?
例如,我们有一个地图,如果需要,我们可以使用它:
service1:myfolder/
service2:myfolder/mysubfolder/
service3:myfolder/myothersubfolder/
service4:myfolder/mysubfolder/myfile
我们被赋予值myfolder/mysubfolder/myfile/blablabla/
(路径)。 我们想要找出它与地图中的哪个项目最相关。 搜索结果应为 service4
作为具有最相关内容的地图项。
那么如何根据给定的字符串值找到与哪个映射元素最相关的呢?
所以原始问题是关于一般字符串情况,但我进行了一些重新配置,所以不,我只是在升压路径上工作。
We have map of boost path to string pairs like name:location (absolute location paths a la usr/myfolder/
). We are given with some location a la usr/myfolder/mysubfolder/myfile
. How to find which of maps location fit to given url most?
Example we have a map like which we can resort if we need:
service1:myfolder/
service2:myfolder/mysubfolder/
service3:myfolder/myothersubfolder/
service4:myfolder/mysubfolder/myfile
We are given value myfolder/mysubfolder/myfile/blablabla/
(path).
We want to find out to which item in our map it relates the most.
Search result shall be service4
as map item with most related content.
So how to find by given string value to which map element it relates the most?
So original question was about general string case but I had some reconfiguration so no I just work on boost paths.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我确实没有现成的 C++ 答案,但最近我不得不在 C# 中做一些类似的事情,并提出以下建议:
循环遍历整个向量,检查有趣的路径以查看它是否以元素开头。此类比赛中最长的获胜者。这将是一个 O(n) 操作,具体取决于比较集中的路径数量。
我对上述内容的改进版本变得有点不同,因为我将检查我之前已经检查过的一些条目。
因此,我按路径长度降序对向量进行排序,这样我遇到的第一个匹配项也是最好的(我认为给我一个平均 O(n/2) 操作),并将结果存储到字典中,所以我不需要再次强力搜索。
希望这有帮助!
I don't really have a ready C++ answer, but I had to do something similar in C# recently, and came up with the following:
Loop through the whole vector, checking the interesting path to see if it begins with an element. The longest such match is the winner. This would be an O(n) operation, depending upon the number of paths in the comparison set.
My refined version of the above became a little different, because I was going to be checking against a number of entries I'd already checked before.
So, I sorted the vector by descending length of path, so that the first match I come across would also be the best (giving me an average O(n/2) operation, I think), and stored results into a dictionary, so I wouldn't need to brute force the search again.
Hope this helps!
您可以使用 Levenshtein 距离
编辑
因为我自己终于需要类似的东西,这个问题仍然悬而未决。这是我使用过的一些代码。既可以直接计算字符串距离,也可以将 Levenshtein 算法应用于路径标记。
C++代码
You could use the Levenshtein distance
EDIT
Since I finally needed something similar myself, and this question remains open. Here is some code I played around with. Both straight up string distance and also applying the Levenshtein algorithm to the path tokens.
C++ Code
显然,
boost::path
不是std::string
,但可能有一个成员来获取std::string
或类似的对象,因此您只需将该成员添加到i->second
和result->second
Obviously,
boost::path
isn't astd::string
, but probably has a member to get astd::string
or similar object, so you'll just have to add that member toi->second
andresult->second