我有一个std :: map,我使用迭代器来查找某个键值对。找到它后,我无法从迭代器获取键值对的位置。通过做另一个发现我可以得到它,但我想要解决这个问题。
//mycode is this
std::map<std::string,myclass*> mymap;
size_t myfind(const std::string &s)
{
std::map<std:string,myclass*>::iterator i=mymap.find(s);
if((i==mymap.end())||((*i).second==0))
{
std::cout<<"some error\n";
}
else
{
//here i need to return the size_t value of the iterator i
}
}
注意:编辑size_t作为键的位置,值对
答案 0 :(得分:3)
如果要返回结果的“位置”:
#include <iterator>
// ...
std::map<std::string,myclass*> mymap;
size_t myfind(const std::string &s)
{
std::map<std:string,myclass*>::iterator i=mymap.find(s);
if((i==mymap.end())||((*i).second==0))
{
std::cout<<"some error\n";
}
else
{
return std::distance(mymap.begin(), i);
}
}
但是,你最好只返回迭代器!
答案 1 :(得分:0)
size_t
与任何事情有什么关系?你找到了键值对,键是一个字符串,value是指向某个类的指针。而已。你有什么size_t
价值?
让你走上正轨的一些背景:STL中的map和set通常被实现为平衡二叉树(红黑树)。树中的每个节点都有值(只是set的键,或者map的对, )和两个指向子节点的指针。您可以将map::iterator
视为指向具有花哨重载运算符的节点的指针,因此,递增迭代器值会将指针移动到排序顺序中的下一个节点。所以迭代器没有“size_t
值”。它是一个包装指向二叉树节点的类的实例。