2011-10-13 83 views
1

我有地圖的地圖如何遍歷一個C++地圖地圖

std::map< int, std::map<string, double> > myMap; 
std::map< int, std::map<string, double> >::iterator itr; 

與遍歷它:

itr = myMap.find(nodeI); 
    if (itr == myMap.end()) 
    { 
     exit(1) ; 
    } 

導致錯誤:

 
     error: no match for âoperator=â in 
     âitr = ((const PushList*)this)->PushList::myMap.std::map<:_Key, _Tp, _Compare, _Alloc>::find 

    [with _Key = int, _Tp = std::map<:std::basic_string<:char, std::char_traits<:char>,  
    std::allocator<:char> >, double, std::less<:std::basic_string<:char, 
    std::char_traits<:char>, 
    std::allocator<:char> > >, std::allocator<:std::pair<:const std::basic_string<:char, 
    std::char_traits<:char>, std::allocator<:char> >, double> > >, _Compare = 
    std::less<:int>, _Alloc = 
    std::allocator<:std::pair<:const int, std::map<:std::basic_string<:char, 
    std::char_traits<:char>, 
    std::allocator<:char> >, double, std::less<:std::basic_string<:char, 
    std::char_traits<:char>, 
    std::allocator<:char> > >, std::allocator<:std::pair<:const std::basic_string<:char, 
    std::char_traits<:char>, std::allocator<:char> >, double> > > > >](((const 
    int&)((const int*)((int*)nodeI))))â 

我怎樣才能迭代地圖的地圖?

+0

a-circumflex('â)字符來自哪裏?他們是在原始錯誤消息,還是由於字符翻譯問題? – outis

+2

示例代碼(當最小代碼被添加以便編譯時)不會產生錯誤。請用[最小測試種姓](http://sscce.org/)更新您的問題。 – outis

+0

你是否對iterator執行了任何操作而不是對end()進行檢查?你可以使用count()方法: 'if(myMap.count(nodeI)== 0){exit(1); }' – MtnViewJohn

回答

4

從您發佈的錯誤可以看出,您正在從類成員const函數中執行此操作。 myMap是否有可能是該類的成員?如果是這樣,你想要的是使用const_iterator。無論如何,你應該這樣做,因爲你不希望修改迭代元素的內容。