82 if (lst.size() == 0)
return {};
83 std::vector<int> key_ids;
84 key_ids.reserve(lst.size() + 1);
85 const Key* group_key = &lst[0].first;
87 int lst_size = lst.size();
88 for (
const std::pair<Key, Val>& p : lst) {
89 if (p.first != *group_key) {
93 key_ids.push_back(max_key_id);
95 key_ids.push_back(max_key_id + 1);
96 std::vector<std::pair<Key, std::vector<Val>>> groups;
97 groups.reserve(max_key_id + 1);
101 for (
int i = 1; i <= lst_size; ++i) {
102 if (key_ids[i] != prev_key_id) {
103 groups.emplace_back(lst[i - 1].first, std::vector<Val>(group_size));
104 auto& new_elem = groups.back();
105 const std::pair<Key, Val>* src_ptr = &lst[i - group_size];
106 for (Val& q : new_elem.second) {
111 prev_key_id = key_ids[i];
Definition nimble.mpi.mpicontext.h:63
std::vector< std::pair< Key, std::vector< Val > > > GroupConsecutive(const std::vector< std::pair< Key, Val > > &lst)
Definition nimble.mpi.reduction_utils.h:80