vendredi 1 juillet 2016

Splitting std::vector based on some criteria

I have a vector which contain some data. I want to split it into const number of vectors depending on some criteria. For example:

using Point=std::pair<int,int>;
std::array<std::vector<Point>,4> split_to_4(const std::vector<Point>& data,std::function<size_t(Point)> criteria);
int main(){
    std::vector<Point> data;
    //fill data
    auto results=split_to_4(data,[](const Point& p){
        if(cond1) return 0;
        if(cond2) return 1;
        if(cond3) return 2;
        return 3;
    });
}

What is the best way to implement split_to_4? My current attempt is:

std::array<std::vector<Point>,4> split_to_4(const std::vector<Point>& data,std::function<size_t(Point)> criteria){
    std::array<std::vector<Point>,4> result;
    for (const auto& p : data){
        areas_regions[criteria(p)].emplace_back(p);
    }
    return result;
}

Any better.. More std way to do it?

By Better, I mean: more readable... depend on iterator... depend on some std functions...

Aucun commentaire:

Enregistrer un commentaire