地图的迭代器 - 搜索问题

时间:2010-09-04 19:29:02

标签: c++

你好我有一个在multimap上运行的迭代器,我的multimap包含两个字段,第一个是键值,它是一个字符串Lastname,第二个1是数据,它是指向一个名为Employee的对象的指针。 在我的程序中,我需要能够使用迭代器在我的地图中找到一个元素(因为我试图通过其ID而不是键值来查找数据)。 我想有一些指示器,告诉我我要找的元素是否在我的地图内。 提前致谢。 这是我的查找代码:

MultiMap::iterator iterator;
iterator=m_municipalityMap.begin();
bool flag = false;
while(!(flag) && iterator != m_municipalityMap.end())
{   
    if(strcmp(iterator->second->GetId() , id) == 0)
    {   
        flag=true;
        break;
    }
    iterator++;
}
if (flag==false)
    cout << "could not find Employee"<<endl;

return iterator;

我需要知道的是,如果有一种方法可以知道迭代器是否与指针上的NULL相比毫无结果

2 个答案:

答案 0 :(得分:1)

你可以使用std :: find_if算法和一个合适的谓词来处理查找 您的员工基于ID。

这是对Nicolai M. Josuttis,Addison-Wesley,1999年“The C ++ Standard Library - A Tutorial and Reference”中的一个例子的改编:

class value_id_equals 
{
private:
    string m_id;
 public:
    // constructor (initialize id to compare with)
     value_id_equals (string id)
      : m_id(id) { }
    // comparison
    bool operator() (pair<string, Employee*> elem) 
    {
        return (!strcmp(elem.second->GetID(), m_id.c_str()));
    }
};

...
pos = find_if(your_map.begin(),your_map.end(),    // linear complexity
              value_id_equals(theID));

答案 1 :(得分:0)

如果容器中需要两个键,则可以尝试Boost Multi-index Container

另一种解决方案是创建两个映射,每个映射都有自己的密钥,并通过(智能)指针将数据保存在每个映射中。