Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t将元素插入嵌套的stl整数集中_C++_Stl_Set_Iterator - Fatal编程技术网

C++ Can';t将元素插入嵌套的stl整数集中

C++ Can';t将元素插入嵌套的stl整数集中,c++,stl,set,iterator,C++,Stl,Set,Iterator,我有一个嵌套的整数集,但我不能将元素插入到嵌套的集合中 std::set<std::set<int> > centre_as_set = bitset_to_set(centre->second->bit_partitions); std::set<std::set<int> >::iterator set_itr; for ( set_itr = centre_as_set.begin(); set_itr != centre_as_

我有一个嵌套的整数集,但我不能将元素插入到嵌套的集合中

std::set<std::set<int> > centre_as_set = bitset_to_set(centre->second->bit_partitions);
std::set<std::set<int> >::iterator set_itr;
for ( set_itr = centre_as_set.begin(); set_itr != centre_as_set.end(); ++set_itr ) {
    set_itr->insert(4);
    std::set<int>::iterator node_itr;
    for ( node_itr = set_itr->begin(); node_itr != set_itr->end(); ++node_itr ) {
            std::cout << *node_itr;
        }
    }
}
std::set center\u as\u set=bitset\u to\u set(center->second->bit\u分区);
std::set::迭代器set\u itr;
for(set_itr=centre_as_set.begin();set_itr!=centre_as_set.end();+set_itr){
设置itr->insert(4);
std::set::迭代器节点\u itr;
对于(node_itr=set_itr->begin();node_itr!=set_itr->end();+node_itr){
std::cout'
作为
'std::pair,\u Compare,
类别名
_Alloc::rebind::other>::常量迭代器,
bool>std::set::insert(const _Key&)[with _Key=int,_Compare=std::less,_Alloc=
std::分配器]'丢弃
限定词


我不能很好地解释模板错误,非常感谢任何帮助。

编辑:根据georg的评论,这个答案是错误的

我这里没有编译器,但是std::set的完整声明是:

template < class Key, class Compare = less<Key>,
           class Allocator = allocator<Key> > class set;
template类集合;

最外层集合的“键”是“std::set”。比较器是“std::less>”或short“operator集合中的元素是不可变的,您正在尝试使用非常量成员函数
insert()
std::set
const
实例上。如果您在
stl\u set.h
中的声明中遵循
迭代器
符号,则会有以下很好的注释:

// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 103. set::iterator is required to be modifiable,
// but this allows modification of keys.
typedef typename _Rep_type::const_iterator iterator;
C++98和C++03允许修改,但这是一个缺陷,已在非古代GCC版本和VC10中修复。可以找到提到的缺陷报告,并将纳入下一个标准

例如,使用类似于以下内容的内容来添加值
4

// Readability:
typedef std::set<int> IntSet;
typedef std::set<IntSet> IntSetSet;

// Helper:
IntSetSet add_value_to_sets(const IntSetSet& in, int i) {
    IntSetSet ss;
    IntSetSet::iterator set_itr;
    for ( set_itr = in.begin(); set_itr != in.end(); ++set_itr ) {
        IntSet s = *set_itr;
        s.insert(4);
        ss.insert(s);
    }
    return ss;
}

// ...
IntSetSet centre_as_set = 
    add_value_to_sets(bitset_to_set(centre->second->bit_partitions), 4);
//可读性:
typedef std::set IntSet;
typedef std::set IntSetSet;
//助手:
IntSetSet将值添加到集合(常量IntSetSet&in,int i){
INTSETSETSS;
IntSetSet::迭代器集_itr;
for(set_itr=in.begin();set_itr!=in.end();+set_itr){
IntSet s=*set_itr;
s、 插入(4);
ss.插入(s);
}
返回ss;
}
// ...
IntSetSet中心作为集合=
将\u值\u添加到\u集合(位集合\u到\u集合(中心->第二->位分区),4);

有一个
运算符,它不是运行时错误,而是编译错误,这就是他的问题所在。噢,我不知道我是否喜欢这个glibcxx功能。这有效地防止了更改集合内容,即使更改不会影响排序。例如,更改未比较的属性。我想说的是大多数用例对于我来说,这绝对比在运行时意外破坏一切要好。