我们有字符串对的映射,如name:location(unix,绝对位置a la myfolder/
)。我们给出了一些位置la myfolder/mysubfolder/myfile
。如何找到最适合给定网址的地图位置?
示例我们有一个类似的地图:
service1:myfolder/
service2:myfolder/mysubfolder/
service3:myfolder/myothersubfolder/
service4:myfolder/mysubfolder/myfile
我们获得值myfolder/mysubfolder/myfile/blablabla/
(字符串)。
我们想知道我们的地图中哪个项目最相关。
搜索结果应为service4
,作为最相关内容的地图项。
那么如何通过给定的字符串值找到它最相关的地图元素呢?
请提供一些代码,因为我是C ++ nube并且没有得到如何补充这样的东西?
所以我简化了一个问题 - now all relation I need is in how deep given path is在字符串的情况下,只需通过所有地图路径上的iteratin查看长度,在给定路径中搜索外观并记住找到的大多数长地图项目路径。给定的路径。
答案 0 :(得分:2)
有两种选择:
std::max_element
,但它通过比较运算符实现最大值,而您需要通过指标获得最大值。)答案 1 :(得分:1)
如果您的地图定义如下:
typedef std::map<std::string,std::string> MyMap;
MyMap my_map;
...搜索词的定义如下:
std::string my_key_to_find = "service4";
...然后你就可以得到与这个键相关的值:
std::string found_val;
MyMap::const_iterator it = my_map.find(my_key_to_find);
if( it != my_map.end() )
found_val = it->second;
else
std::cout << "Key not found!\n";
答案 2 :(得分:1)
如果我正确理解您的问题,您希望按值(字符串)搜索键,其中匹配值是所提供搜索词的子字符串。我不认为有一个简单的解决方案作为一般问题(即任意字符串及其所有子串)。
但是,在示例中用作值的字符串具有特定结构(即文件系统路径)。您可以利用此结构来提出一个干净的解决方案。首先,制作一个bi-directional map。然后,实现以下查找过程:
如果列表很短,您可能只想循环遍历(键,值)对列表,并选择值最相似的键(即共同的最长子串)。