My tip: use armadillo and MLPack for k-means. No idea how you would use for your particular use case.
// Dataset matrix
arma::mat dataset = arma::zeros(measurements/coordinates/etc.size(), labels/entities.size());
// todo: fill matrix with values
// Prepare to run K-means
arma::Row<size_t> assignments;
arma::mat centroids;
if (allowEmptyClusters)
{
mlpack::KMeans<mlpack::EuclideanDistance,
mlpack::SampleInitialization,
mlpack::AllowEmptyClusters,
mlpack::NaiveKMeans,
arma::mat>
k;
k.Cluster(dataset, cells.size(), assignments, centroids);
}
else
{
mlpack::KMeans<> k;
k.Cluster(dataset, cells.size(), assignments, centroids);
}
// Print datasest
std::cout << dataset << std::endl;
// Print assigned index of cluster centroid for each label/entity
std::cout << assignments << std::endl;