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,但如果项从集合中移除,则与这些项对应的迭代器将是::-)