我收到编译错误“map / set”迭代器而不是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;
}
答案 0 :(得分:2)
地图为空,因此m.begin()
等于过去的迭代器,因此无效。
首先,您必须以某种方式使用insert
元素(您也可以使用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;
}
答案 1 :(得分:1)
你的map
空了!你的迭代器指向的是未定义的。
你想做的是
int main(){
map<int, int> m;
m[0] = 0;
map<int, int>::iterator itr=m.begin();
cout << itr->first << " " << itr->second;
return 0;
}
答案 2 :(得分:1)
此处您尚未指定任何值。并且您无法更改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;