#include <iostream>
#include <map>
#include <vector>
typedef std::vector<std::vector<double> > matrix_t;
struct stats {
int count = 0;
double total = 0.0;
};
typedef std::map<double, stats> results_t;
results_t aggregate(matrix_t const& matrix)
{
results_t results;
for (auto const& row: matrix)
{
auto const& id = row[0];
auto const& value = row[1];
auto& stats = results[id];
++stats.count;
stats.total += value;
}
return results;
}
int main()
{
matrix_t matrix = {
{1, 10},
{2, 20},
{1, 30},
{2, 40},
{3, 60}
};
std::cout << "ID" << "\tCOUNT" << "\tMEAN" << std::endl;
for (auto const& row: aggregate(matrix))
{
auto stats = row.second;
std::cout << row.first << '\t' << stats.count << '\t' << stats.total / stats.count << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgoKdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjxkb3VibGU+ID4gbWF0cml4X3Q7CnN0cnVjdCBzdGF0cyB7CiAgICBpbnQgY291bnQgPSAwOwogICAgZG91YmxlIHRvdGFsID0gMC4wOwp9Owp0eXBlZGVmIHN0ZDo6bWFwPGRvdWJsZSwgc3RhdHM+IHJlc3VsdHNfdDsKCnJlc3VsdHNfdCBhZ2dyZWdhdGUobWF0cml4X3QgY29uc3QmIG1hdHJpeCkKewogICAgcmVzdWx0c190IHJlc3VsdHM7CiAgICBmb3IgKGF1dG8gY29uc3QmIHJvdzogbWF0cml4KQogICAgewogICAgICAgIGF1dG8gY29uc3QmIGlkID0gcm93WzBdOwogICAgICAgIGF1dG8gY29uc3QmIHZhbHVlID0gcm93WzFdOwogICAgICAgIGF1dG8mIHN0YXRzID0gcmVzdWx0c1tpZF07CiAgICAgICAgKytzdGF0cy5jb3VudDsKICAgICAgICBzdGF0cy50b3RhbCArPSB2YWx1ZTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0czsKfQoKaW50IG1haW4oKQp7CiAgICBtYXRyaXhfdCBtYXRyaXggPSB7CiAgICAgICAgezEsIDEwfSwKICAgICAgICB7MiwgMjB9LAogICAgICAgIHsxLCAzMH0sCiAgICAgICAgezIsIDQwfSwKICAgICAgICB7MywgNjB9CiAgICB9OwoKICAgIHN0ZDo6Y291dCA8PCAiSUQiIDw8ICJcdENPVU5UIiA8PCAiXHRNRUFOIiA8PCBzdGQ6OmVuZGw7CiAgICBmb3IgKGF1dG8gY29uc3QmIHJvdzogYWdncmVnYXRlKG1hdHJpeCkpCiAgICB7CiAgICAgICAgYXV0byBzdGF0cyA9IHJvdy5zZWNvbmQ7CiAgICAgICAgc3RkOjpjb3V0IDw8IHJvdy5maXJzdCA8PCAnXHQnIDw8IHN0YXRzLmNvdW50IDw8ICdcdCcgPDwgc3RhdHMudG90YWwgLyBzdGF0cy5jb3VudCA8PCBzdGQ6OmVuZGw7CiAgICB9Cn0=