簡體   English   中英

映射迭代器不可取消

[英]map iterator not dereferencable

我收到了編譯錯誤“映射/設置”迭代器無法取消引用”。這是怎么回事?

#include<iostream>
#include<map>

using namespace std;

int main(){
    map<int, int> m;
    map<int, int>::iterator itr=m.begin();

    itr->first = 0;
    itr->second = 0;

    cout << itr->first << " " << itr->second;
    return 0;
}

映射為空,因此m.begin()等於過去的迭代器,因此無效。

首先,您必須以某種方式insert元素(也可以通過使用operator[]隱式地執行此operator[] )以使其有用。

同樣,您不能像這樣修改元素的鍵。 您將必須從地圖上刪除( erase )該元素,然后使用新鍵插入一個新元素。

這是關於此的示例:

#include<iostream>
#include<map>

using namespace std;

int main(){
    map<int, int> m;

    // insert element by map::insert
    m.insert(make_pair(3, 3));

    // insert element by map::operator[]
    m[5] = 5;

    std::cout << "increased values by one" << std::endl;
    for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
    {
        it->second += 1;
        cout << it->first << " " << it->second << std::endl;
    }

    // replace an element:        
    map<int, int>::iterator thing = m.find(3);
    int value = thing->second;
    m.erase(thing);
    m[4] = value;

    std::cout << "replaced an element and inserted with different key" << std::endl;
    for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
    {
        cout << it->first << " " << it->second << std::endl;
    }

    return 0;
}

您的map是空的! 您的迭代器指向的對象是不確定的。

你想做的是

int main(){
    map<int, int> m;
    m[0] = 0;
    map<int, int>::iterator itr=m.begin();

    cout << itr->first << " " << itr->second;
    return 0;
}

在這里您沒有分配任何值。 並且您不能更改itr->first的密鑰。 它只能是只讀的。 但是您可以編輯itr->second

map<int, int> m;
    m[10]=0;
    map<int, int>::iterator itr=m.begin();


      itr->second=10;
    cout << itr->first << " " << itr->second;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM