C ++, как группировать данные в диапазоне - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу сгруппировать данные в пределах диапазона, но не могу придумать подходящий способ сделать это.

std::map<int, std::vector<int>> master_map,sub_map;
int range = 5;
std::vector<int> res;

//Say master_map has data like :
//{{10,[10,21]},{11,[30,33]}}
//and sub_map has data like :
//{{4,[29,30]},{6,[1,2]}}

Алгоритм должен сравнивать каждое значение данных master_map со значением данных sub_map. При сравнении следует добавить все значения в векторе. Если разница меньше диапазона, то она считается равной единице. Когда он больше, чем диапазон, он считается за единицу. Поэтому в этом случае выходные данные res будут выглядеть примерно так: [1,2,3], поскольку master_map {11, [30,33]} и sub_map {4, [29,30]} находятся в пределах диапазона.

int cnt = 0;
for(auto const& m : master_map){
    for(auto const& s : sub_map){
        if(range > (m.second[0]+m.second[1]-s.second[0]+s.second[1])){
            res.push_back(cnt);
            cnt += 1;
        } else {
            res.push_back(cnt);
            cnt += 1;
        }
    }
}

Эти выходные данные соответствуют [1,2,3,4], как я могу изменить это для удовлетворения моих потребностей?

...