На основе этого ввода я попытался конкретизировать решение, предоставленное YSC в моем случае, чтобы лучше понять, что происходит.Это сводится к использованию std::map
, который является отсортированным ассоциативным контейнером :
std::map<std::vector<int>, int> SortAndCountOccurences(std::vector<std::vector<int>>& vectors)
{
std::map<std::vector<int>, int> result;
std::for_each(vectors.begin(), vectors.end(), [&result](auto const& vector) {
++result[vector];
});
return result;
}
При следующем использовании:
std::vector<std::vector<int>> responseVectors
{
{ 2, 3, 2 },
{ 3, 2, 3 },
{ 3, 2, 3 },
{ 3, 3, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 2, 1, 2 },
{ 0, 1, 2 },
{ 2, 3, 2 },
{ 3, 2, 3 },
{ 3, 2, 3 },
{ 3, 3, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 2, 1, 2 },
{ 0, 1, 2 }
};
std::map<std::vector<int>, int> sortedVectors = SortAndCountOccurences(responseVectors);
Который будет выводить:
for(auto&& vector : sortedVectors)
{
for(auto&& value : vector.first)
{
std::cout << "\t" << value << "\t";
}
std::cout << "-> x" << vector.second << " times" << "\n";
}
// 0 1 2 -> x2 times
// 1 2 3 -> x6 times
// 2 1 2 -> x2 times
// 2 3 2 -> x2 times
// 3 2 3 -> x4 times
// 3 3 3 -> x2 times
Примечание: Решение на YSC можно обобщить до что-нибудь итерируемое .