C ++:set :: insert with iterators和sets of sets

时间:2013-08-16 15:32:25

标签: c++ containers

我有一组称为网络的整数,我正在尝试迭代以确定是否已将任何一个或哪些整数添加到现有集合中;如果是这样,我将它们添加到现有的集合中(这是为了跟踪电气网络上所有短路的组合)。

但是,我无法使set :: insert功能正常工作!我能够使用(*它).count就可以确定是否已经将一个int添加到一个集合中,但是(*它).insert不起作用(我总是收到错误没有匹配的成员函数调用'插入')。但是,如果我只创建一组int,则setName.insert(to)可以正常工作。

我的代码出了什么问题?

for (std::set<std::set<int>>::iterator it=nets.begin(); it!=nets.end(); ++it) {  
    if ((*it).count(to) || (*it).count(from)) {
        currentSet = (*it);
        (*it).insert(to);
        (*it).insert(from);
        addedToExistingSet = true;    
    }
}

2 个答案:

答案 0 :(得分:2)

由于std::set是一个关联容器,它包含一组排序为T的唯一对象,因此您无法修改其中的对象,因为您会使{无效{1}}。

如果允许,您可以从容器下面更改项目值,这可能会改变排序。

标准说:

  

23.2.4关联容器[associative.reqmts]

     关联容器的

set属于双向迭代器类别。 对于关联容器,其中值类型与键类型相同,iteratoriterator都是常量迭代器

您应该考虑使用另一个容器作为外部容器,例如const_iterator

答案 1 :(得分:0)

这里的问题是您正在尝试修改集合中的对象,这不是有效的操作,因为您将使集合无效。您是否有理由需要将外部容器设置为一组?例如,它可能是std::vector吗?