set的迭代器it有const修饰符,那么对它元素的修改就必然不能成功了。但是有时候遇到要修改stl set元素的问题,这个问题一般的解决方法是先erase这个元素,然后再insert,这样效率很低,所以得找更有效的方法,开始的时候编译始终通不过。如果利用const_cast(*it)把it映射成一个引用的对象,那么就可以对它进行修改了。更加通用的方法如下: #include<stdio.h> #include<stdlib.h> #include<time.h> #include <map> #include <set> using namespace std; class node { public : int a ; int b; bool operator<(const node &t)const { return a < t.a; } }; multiset<node>ss; int main() { node a,b,c; ss.insert(a); ss.insert(b); ss.insert(c); multiset<node>::iterator it = ss.begin(),ed = ss.end(); for(;it!=ed;it++) { const_cast<node*>(&(*it))->b = 10; printf("%d\n",it->b); } for(;it!=ed;it++) { it->b = 11; printf("%d\n",it->b); } return 0; }
时间: 2024-10-09 11:20:13