From 70bbfe664bbbfe4ad97ec99d8b3d83092a000a74 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 8 Feb 2006 16:15:16 +0000 Subject: [PATCH] Some improvements from Jeremiah Willcock [SVN r32743] --- include/boost/graph/plod_generator.hpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/include/boost/graph/plod_generator.hpp b/include/boost/graph/plod_generator.hpp index 324594a0..4e19a6bb 100644 --- a/include/boost/graph/plod_generator.hpp +++ b/include/boost/graph/plod_generator.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include namespace boost { @@ -37,18 +38,19 @@ namespace boost { plod_iterator(RandomGenerator& gen, std::size_t n, double alpha, double beta, bool allow_self_loops = false) - : gen(&gen), n(n), out_degrees(new out_degrees_t(n)), + : gen(&gen), n(n), out_degrees(new out_degrees_t), degrees_left(0), allow_self_loops(allow_self_loops) { using std::pow; uniform_int x(0, n-1); - for (out_degrees_t::iterator i = out_degrees->begin(); - i != out_degrees->end(); ++i) { + for (std::size_t i = 0; i != n; ++i) { std::size_t xv = x(gen); - i->first = i - out_degrees->begin(); - i->second = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha))); - degrees_left += i->second; + std::size_t degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha))); + if (degree != 0) { + out_degrees->push_back(std::make_pair(i, degree)); + } + degrees_left += degree; } next(directed_category());