Add simplicial_complex::randomize_order()
[libstick.git] / include / libstick-0.1 / simplicialcomplex.h
index e83daa47b83597cc016b97bb0bcbd4e04ea3d58b..849bb2284e1185e338405bc60b64a3c85969f998 100644 (file)
@@ -149,13 +149,22 @@ class simplicial_complex {
                     return is_filtration();
                 }
 
+                /** Randomize order. It has hardly any impact on runtime, but
+                 * it makes cycles "nicer" when the simplice's function values
+                 * are constant.
+                 * */
+                void randomize_order() {
+                    std::random_shuffle(order.begin(), order.end());
+                    restore_revorder_from_order();
+                }
+
                 /** Sort simplices such that is_monotone() gives true. This
                  * requires that the complex's is_monotone() gave true
                  * beforehand.*/
                 void make_monotone_filtration() {
                     assert(c.is_monotone());
 
-                    sort(order.begin(), order.end(), cmp_monotone_filtration(c));
+                    std::sort(order.begin(), order.end(), cmp_monotone_filtration(c));
                     restore_revorder_from_order();
 
                     assert(c.is_monotone());