首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保我对std::set in循环中的每一对元素都进行了插入操作?

如何确保我对std::set in循环中的每一对元素都进行了插入操作?
EN

Stack Overflow用户
提问于 2014-12-22 15:43:46
回答 2查看 80关注 0票数 0
代码语言:javascript
复制
std::set<BooleanFunction>::iterator  it;
for(it=closure.begin (); it!=closure.end (); ++it)
{ 

  std::set<BooleanFunction>::iterator  jit;
  for(jit=closure.begin (); jit!=closure.end (); ++jit)
  {

    for(uint i=0U; i<it->Arity (); ++i)
    { BooleanFunction  f = it->Superposition (*jit, i);

      if( f.Arity () <= test.Arity () )
       closure.insert (f);
    }
  }
}

我怎样才能确定,每两个元素都有相互叠加的地方?

编辑:自我叠加也是可能的:f(f(X),f(X)),.-是可以的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-22 18:29:40

我想你可以用2套,如下所示。

代码语言:javascript
复制
std::set<BooleanFunction> builder
std::set<BooleanFunction>::iterator  it;
for(it=closure.begin (); it!=closure.end (); ++it)
{ 
    bulider.insert(*it);
    for(uint i=0U; i<it->Arity (); ++i)
    {
        BooleanFunction  f = it->Superposition (*it, i);
        if( f.Arity () <= test.Arity () )
            builder.insert (f);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-22 17:18:33

额外的体操圈看起来非常可怕:

代码语言:javascript
复制
void  smart_insert (std::set<BooleanFunction>  &closure,
                    std::set<BooleanFunction>::iterator  it,
                    std::set<BooleanFunction>::iterator jit,
                       const BooleanFunction   &f, uint arity)
{
  if( f.Arity () <= arity && closure.find (f) == closure.end () )
  { 
    if( f < *jit )
    { std::set<BooleanFunction>::iterator  nit;
      ++it;

      for(nit=closure.begin (); nit!=it; ++nit)
       for(uint i=0U; i<nit->Arity (); ++i)
       { BooleanFunction  ff = nit->Superposition (f, i);

         smart_insert (closure, nit, closure.find (f), ff, arity);
       } // end for i
    } // end if *jit
    if( f < *it )
    { std::set<BooleanFunction>::iterator  njit;
      ++jit;

      for(njit=closure.begin (); njit!=jit; ++njit)
       for(uint i=0U; i<f.Arity (); ++i)
       { BooleanFunction  ff = f.Superposition (*njit, i);

         smart_insert (closure, closure.find (f), njit, ff, arity);
       } // end for i
    } // end if *it
    closure.insert (f);
  } // end if arity & unique
}

// ...
std::set<BooleanFunction>::iterator  it;
for(it=closure.begin (); it!=closure.end (); ++it)
{ 

  std::set<BooleanFunction>::iterator  jit;
  for(jit=closure.begin (); jit!=closure.end (); ++jit)
  {

    for(uint i=0U; i<it->Arity (); ++i)
    { BooleanFunction  f = it->Superposition (*jit, i);

      smart_insert (closure, it, jit, f, test.Arity () );
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27605851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档