迭代器操作的问题

时间:2010-03-04 04:49:56

标签: c++ stl

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

2 个答案:

答案 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值”。它是一个包装指向二叉树节点的类的实例。