C++ 为什么设置<;字符串>;::迭代器不能用作映射的键?
我有一段代码如下:C++ 为什么设置<;字符串>;::迭代器不能用作映射的键?,c++,stl,map,iterator,key,C++,Stl,Map,Iterator,Key,我有一段代码如下: set<string>::iterator it1; set<string>::iterator it2; pair<set<string>::iterator,bool> ret; set<string> s; ret = s.insert("bbbb1"); it1 = ret.first; ret = s.insert("bbbb2"); it2 = ret.first; map<set<st
set<string>::iterator it1;
set<string>::iterator it2;
pair<set<string>::iterator,bool> ret;
set<string> s;
ret = s.insert("bbbb1");
it1 = ret.first;
ret = s.insert("bbbb2");
it2 = ret.first;
map<set<string>::iterator, set<string>::iterator> m;
m.insert(make_pair(it1,it2));
set::迭代器it1;
set::迭代器it2;
配对ret;
设置s;
ret=s.插入(“BB1”);
it1=重新开始;
ret=s.插入(“BB2”);
it2=重新开始;
地图m;
m、 插入(组成配对(it1、it2));
但是最后一行“m.insert(make_pair(it1,it2));”失败了
std::set
迭代器不是随机访问迭代器,因此它们的可比性不低
在
std::map
中用作键的类型必须能够使用。默认情况下,std::map
使用迭代器作为映射键是一个糟糕的想法(因为任何随后失效的迭代器都可能导致未定义的行为)。不要这样做-(std::set
中的@Chris:iterator很少无效。@James:True,但如果项从集合中移除,则与这些项对应的迭代器将是::-)