While the original question asks about how to implement Voronoi, had I found a post that said the following when I was searching for info on this subject it would have saved me a lot of time:
There's a lot of "nearly correct" C++ code on the internet for implementing Voronoi diagrams. Most have rarely triggered failures when the seed points get very dense.
I would recommend to test any code you find online extensively with the number of points you expect to use in your finished project before you waste too much time on it.
The best of the implementations I found online was part of the MapManager program linked from here:
http://www.skynet.ie/~sos/mapviewer/voronoi.php
It mostly works but i'm getting intermittent diagram corruption when dealing with order 10^6 points.
I have not been able to work out exactly how the corruption is creeping in.
Last night I found this:
http://www.boost.org/doc/libs/1_53_0_beta1/libs/polygon/doc/voronoi_main.htm
"The Boost.Polygon Voronoi library".
It looks very promising. This comes with benchmark tests to prove it's accuracy and has great performance.
The library has a proper interface and documentation.
I'm surprised I didn't find this library before now, hence my writing about it here. (I read this post early in my research.)