0
我是将一个矢量元素分组到地图中,是否有更高效或更优雅的方式来执行它,而不是我目前的应用程序? - 我认为它在代码方面很麻烦,而且在性能方面也不是最佳的。我如何优雅而高效地将矢量的元素分组到地图中?
我是从C#,其中I通常会使用如这样的解决这样的情况来:
var groupedObservations = observations.GroupBy(o => o.x, o => o.y,o => o.z);
在我目前C++,我第一排序含的所有元素,然后使用if语句我确定向量当一个新的组织开始并将所有后续的“平等”要素推入该组。
我现在的代码如下;
struct Observation { int id; double x,y,z; }
vector<std::shared_ptr<Observation>> observations;
..code that fills observations from csv is omitted ..
map<int,vector<shared_ptr<Observation>>> groupedObservations;
std::sort(observations.begin(), observations.end(), sorting_functor());
int groupId = 0;
double x =0 ,y =0 ,z = 0;
for(shared_ptr<Observation> &observation: observations)
{
if(!(x == record->x && y== observation->y && z == observation->z))
{
groupId++; //coordinates different; new group.
x = observation->x;
y = observation->y;
z = observation->z;
}
groupedObservations[groupId].push_back(observation);
}
为了完整性,分拣函子如下:
struct sorting_functor
{
bool operator()(const shared_ptr<Observation> &a, shared_ptr<Observation> &b) const
{
return (a->x < b->x) && (a->y < b->y) && (a->z < b->z);
}
};
也许我可以制作一张不是基于3双打的地图,而是基于我使用的三个双打的'独特'值。 - 也许是一个按位或?不过,我不知道该怎么做。 – Joeppie
@ O'Neil一个向量,谢谢你指出,纠正了它的声明。 – Joeppie
https://www.youtube.com/watch?v=mFUXNMfaciE – slf