我认为STL容器设置和映射以严格的弱顺序提供元素。但是,我发现,如果我通过查找并通过取消引用更改元素的值来获得迭代器,则它不会恢复顺序,这违反了23.1.2.2和23.3.3.2。这是代码

    int nv = 3;
set<int> s = set<int>();
s.insert(5);
s.insert(10);
s.insert(20);
s.insert(30);
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
    cout<<*cit<<" ";
cout <<endl;
set<int>::iterator it = s.find(10);
*it = nv;
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
    cout<<*cit<<" ";
cout <<endl;
s.insert(40);
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
    cout<<*cit<<" ";
cout <<endl;

产生:
5 10 20 30
5 3 20 30
5 3 20 30 40

我的STL版本(MS VS 2008)是否存在错误?还是我错了?

最佳答案

set的迭代器和const_iterator都是常量迭代器。您不允许修改集的值,只能删除和插入。

关于c++ - 在集合中失去严格的弱排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4631053/

10-10 22:58