map.find实现

时间:2012-03-26 14:37:26

标签: stl map find

我正在尝试自己实现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;
}

1 个答案:

答案 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表示地图值的类型。