我正在尝试自己实现map.find,因为我必须在regexp中搜索。 但是我的代码很长。帮助PLZ。我该如何改进代码?我可以用其他方式向迭代器添加整数吗?内置功能的工作速度提高了10倍以上。
iterator find (string toFind)
{
iterator begin=mainMap.begin();
int L=0;
int R=mainMap.size();
iterator M;
while (L!=R)
{
M=begin;
addition(&M,((R+L)/2));
if (match (&(*M).first, &toFind))
return M;
if (toFind<(*M).first)
{
R=(R+L)/2;
}
else
L=(R+L)/2+1;
}
return mainMap.end();
}
void addition (iterator* it, int n)
{
for(int i=0;i<n;i++, (*it)++)
{
}
}
bool match (const string* expression, const string* line)
{
return *expression==*line;
}
答案 0 :(得分:0)
您不必实施新的查找算法。将比较仿函数传递给地图就足够了。
像
这样的东西struct MyLessThan
{
bool operator(const string& left, const string& right )(
//Your implementation of less than, where you can use regular expressions
//Don't forget it should have strict weak ordering
}
};
然后将地图定义为(使用仿函数作为模板参数)
std::map<string, VALUETYPE, MyLessThan> myMap;
使用VALUETYPE表示地图值的类型。