你好我有一个在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相比毫无结果
答案 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。
另一种解决方案是创建两个映射,每个映射都有自己的密钥,并通过(智能)指针将数据保存在每个映射中。