diff --git a/mex/sources/libkorder/tl/equivalence.cc b/mex/sources/libkorder/tl/equivalence.cc
index 5728679fc69a7ec8bc37c626d9cf2290bf2ff3a7..d471bcca84a03619718dd1b049be8d59411e5351 100644
--- a/mex/sources/libkorder/tl/equivalence.cc
+++ b/mex/sources/libkorder/tl/equivalence.cc
@@ -23,6 +23,7 @@
 #include "tl_exception.hh"
 
 #include <iostream>
+#include <numeric>
 
 int
 OrdSequence::operator[](int i) const
@@ -102,11 +103,8 @@ OrdSequence::has(int i) const
 double
 OrdSequence::average() const
 {
-  double res = 0;
-  for (int i : data)
-    res += i;
-  TL_RAISE_IF(data.size() == 0, "Attempt to take average of empty class in OrdSequence::average");
-  return res / data.size();
+  TL_RAISE_IF(data.empty(), "Attempt to take average of empty class in OrdSequence::average");
+  return std::accumulate(data.begin(), data.end(), 0.) / data.size();
 }
 
 /* Debug print. */