[英]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.