Да кажем, че имам вектор, деклариран така:
struct MYSTRUCT
{
float a;
float b;
};
std::vector<MYSTRUCT> v;
Сега искам да намеря всички елементи на v, които споделят едно и също a, и да осредня тяхното b, т.е.
Да кажем, че v съдържа тези пет елемента {a, b}: {1, 1}, {1, 2}, {2, 1}, {1, 3}, {2, 2}
Искам да получа v[0], v[1], v[3] (където a е 1) и средно b: (1 + 2 + 3)/3 = 2 и v[2] и v[4] (където a е 2) и средно b: (1+2)/2 = 1,5
След това v ще изглежда така: {1, 2}, {1, 2}, {2, 1.5}, {1, 2}, {2, 1.5}
Не съм много запознат със STL или Boost, така че мога само да разбера как да направя това по "брутфорс" начина в C++, но предполагам, че библиотеките STL (for_each?) и Boost (lambda?) могат да решат това по-елегантно.
РЕДАКТИРАНЕ Само за справка, ето моя (работещ) начин за груба сила да го направя:
for(int j = 0; j < tempV.size(); j++)
{
MYSTRUCT v = tempV.at(j);
int matchesFound = 0;
for(int k = 0; k < tempV.size(); k++)
{
if(k != j && v.a == tempV.at(k).a)
{
v.b += tempV.at(k).b;
matchesFound++;
}
}
if(matchesFound > 0)
{
v.b = v.b/matchesFound;
}
finalV.push_back(v);
}