2010-03-04 157 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迭代器的值」。它是一個包含二叉樹節點指針的類的實例。