2010-03-04 154 views
0

我有一个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关键的位置,值对

+1

你是什么意思“来自迭代器的size_t值”? size_t是C中的一个类型,它不是迭代器的值。请详细说明 – 2010-03-04 04:53:48

+0

迭代器的“size_t”值是什么意思? – Naveen 2010-03-04 04:54:25

+0

什么'size_t'值?您的地图使用'std :: string'作为键,'myclass *'作为值。我没有在任何地方看到任何'size_t' ... – 2010-03-04 04:54:42

回答

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); 
    } 
} 

然而,你可能会更好过只是返回迭代器!

+0

谢谢多数民众赞成我正在寻找。 – Sriram 2010-03-04 05:08:37

+0

返回类型应该是'mymap :: size_type',而不是'size_t'。 – AnT 2010-03-04 14:50:48

+0

AndreyT部分正确,但'mymap'不是一种类型。 – rlbond 2010-03-05 16:21:24

0

size_t与什么有关?您找到了键值对,键是一个字符串,值是指向某个类的指针。而已。你记得什么样的价值?

一些背景让你走上正轨:地图和STL设置通常实现为平衡二叉树(红黑树)。树中的每个节点都有值(只需设置关键点或地图对,)和两个指向子节点的指针。你可以将map::iterator想象成一个指向带有花式重载操作符的节点的指针,例如,递增迭代器值将指针按排序顺序移动到下一个节点。所以没有“size_t迭代器的值”。它是一个包含二叉树节点指针的类的实例。