我有一组称为nets的整数集,我试图对其进行遍历以确定是否要添加到已有的整数或从中获取整数。如果是这样,我将它们添加到现有集合中(这是为了跟踪电网中所有短路组合)。

但是,我无法使set :: insert函数正常工作!我能够使用(* it).count很好地确定是否已将一个int添加到集合中,但是(* it).insert不起作用(我总是收到错误消息,没有匹配的成员函数调用'插入')。但是,如果我仅创建一组整数,则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;
    }
}

最佳答案

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

如果允许,则可以从容器下方更改项目值,从而可能更改顺序。

标准说:


  23.2.4关联容器[associative.reqmts]
  
  关联容器的iterator属于双向迭代器类别。对于值类型与键类型相同的关联容器,iteratorconst_iterator均为常量迭代器。


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

07-24 09:45
查看更多