有一个字符串 strvec 的矢量和一个模式字符串,我尝试沿着strvec进行模糊搜索,以获得所有元素位置与模式的距离最小+一定的容差(TOL)。从几何学上讲,我希望得到半径等于的圆圈中的单词:距离strvec + tol的最小距离。所以我的算法应该得到:
我假设距离是使用函数 get_distance 计算的。
这是我的代码:
vector<int> dist_minimal(const char* pattern, vector<string> strvec,int tol=4)
{
std::vector<int> v;
int min = 100; // big value to init
for (vector<string>::iterator it = strvec.begin(); it != strvec.end() ; it++){
int lev_dist=get_distance(pattern, *it);
auto position = it-strvec.begin()+1 ;
if(lev_dist < min && lev_dist >0){
v.clear();
v.push_back(position);
min = lev_dist;
std::cout << min << std::endl;
}else if (lev_dist == min){
v.push_back(position);
}
}
return v;
}
我只获得与最小距离完全相等的元素,而不是min_distance和min_distance + tol之间的元素。
答案 0 :(得分:0)
你能改变吗?
else if (lev_dist == min)
{
v.push_back(position);
}
要
else if ((lev_dist <= (min + tol)) && (lev_dist >= (min - tol)))
{
v.push_back(position);
}