# 1282. Group the People Given the Group Size They Belong To
Difficulty: Medium
## Solution
```cpp=
/**
*** Author: R-CO
*** E-mail: daniel1820kobe@gmail.com
*** Date: 2020-10-27
**/
#include <cstdlib> // EXIT_SUCCESS
#include <unordered_map>
using std::unordered_map;
#include <vector>
using std::vector;
using GroupSizeMap = unordered_map<int, vector<vector<int>>>;
using GroupSizeMapPair = std::pair<int, vector<vector<int>>>;
class Solution {
public:
vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
GroupSizeMap group_size_map;
int people_id = 0;
for (const auto group_size : groupSizes) {
static auto assignGroup = [&group_size_map, &people_id, &group_size] (GroupSizeMap::iterator &itor) {
auto &group_vec = itor->second.back();
if (group_vec.size() < group_size) {
group_vec.emplace_back(people_id);
} else {
itor->second.emplace_back(vector<int>{people_id});
}
};
auto group_map_itor = group_size_map.find(group_size);
if (group_map_itor != group_size_map.end()) {
assignGroup(group_map_itor);
} else {
group_size_map.insert(
GroupSizeMapPair(group_size, vector<vector<int>>{{}}));
group_map_itor = group_size_map.find(group_size);
assignGroup(group_map_itor);
}
++people_id;
}
vector<vector<int>> output;
for (auto group_map_itor : group_size_map) {
auto &group_vecs = group_map_itor.second;
for (auto &group : group_vecs) {
output.emplace_back(std::move(group));
}
}
return output;
}
};
int main(int argc, char *argv[]) { return EXIT_SUCCESS; }
```
## Result
Success
Details
Runtime: 16 ms, faster than 95.90% of C++ online submissions for Group the People Given the Group Size They Belong To.
Memory Usage: 15 MB, less than 12.02% of C++ online submissions for Group the People Given the Group Size They Belong To.
###### tags: `LeetCode-Medium` `C++`