Допустим, у меня есть вектор, объявленный так:
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 (лямбда?) может решить это более элегантно.
РЕДАКТИРОВАТЬ Просто для справки, вот мой (рабочий) способ грубой силы сделать это:
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);
}