当前位置: 首页>>代码示例>>C++>>正文


C++ TVec::PushHeap方法代码示例

本文整理汇总了C++中TVec::PushHeap方法的典型用法代码示例。如果您正苦于以下问题:C++ TVec::PushHeap方法的具体用法?C++ TVec::PushHeap怎么用?C++ TVec::PushHeap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TVec的用法示例。


在下文中一共展示了TVec::PushHeap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: MergeBestQ

 bool MergeBestQ() {
   const TFltIntIntTr TopQ = FindMxQEdge();
   if (TopQ.Val1 <= 0.0) { return false; }
   // joint communities
   const int I = TopQ.Val3;
   const int J = TopQ.Val2;
   CmtyIdUF.Union(I, J); // join
   Q += TopQ.Val1;
   TCmtyDat& DatJ = CmtyQH.GetDat(J);
   { TCmtyDat& DatI = CmtyQH.GetDat(I);
   DatI.DelLink(J);  DatJ.DelLink(I);
   for (int i = -1; DatJ.NIdQH.FNextKeyId(i); ) {
     const int K = DatJ.NIdQH.GetKey(i);
     TCmtyDat& DatK = CmtyQH.GetDat(K);
     double NewQ = DatJ.NIdQH[i];
     if (DatI.NIdQH.IsKey(K)) { NewQ = NewQ+DatI.NIdQH.GetDat(K);  DatK.DelLink(I); }     // K connected to I and J
     else { NewQ = NewQ-2*DatI.DegFrac*DatK.DegFrac; }  // K connected to J not I
     DatJ.AddQ(K, NewQ);
     DatK.AddQ(J, NewQ);
     MxQHeap.PushHeap(TFltIntIntTr(NewQ, TMath::Mn(J,K), TMath::Mx(J,K)));
   }
   for (int i = -1; DatI.NIdQH.FNextKeyId(i); ) {
     const int K = DatI.NIdQH.GetKey(i);
     if (! DatJ.NIdQH.IsKey(K)) { // K connected to I not J
       TCmtyDat& DatK = CmtyQH.GetDat(K);
       const double NewQ = DatI.NIdQH[i]-2*DatJ.DegFrac*DatK.DegFrac;
       DatJ.AddQ(K, NewQ);
       DatK.DelLink(I);
       DatK.AddQ(J, NewQ);
       MxQHeap.PushHeap(TFltIntIntTr(NewQ, TMath::Mn(J,K), TMath::Mx(J,K)));
     }
   }
   DatJ.DegFrac += DatI.DegFrac; }
   if (DatJ.NIdQH.Empty()) { CmtyQH.DelKey(J); } // isolated community (done)
   CmtyQH.DelKey(I);
   return true;
 }
开发者ID:pikma,项目名称:Snap,代码行数:37,代码来源:cmty.cpp


注:本文中的TVec::PushHeap方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。