извиняюсь за большой вопрос
возникли сложности с подходящим алгоритмом
есть структура
enum T {A, B, C, D, E};
struct S{
T type;
int count;
S (T t, int c) : type (t), count (c){;}
bool operator == (const S& s){
return type == s.type;
}
void operator += (const S& s){
count += s.count;
}
void operator << (const S& s){
type = s.type;
count += s.count;
}
};
const S operator+ (const S& lhs, const S& rhs){
return S (lhs.type, lhs.count + rhs.count);
}
1. Есть вектор объектов
std::vector<S> v1(3);
std::vector<S> v2(3);
нужно каждый элемент 1 списка объединить с каждым элементом второго
я смог это сделать только так
std::transform (v1.begin(), v1.end(),
v2.begin(), v1.begin(),
std::plus<S>());
но для каждой пары создается новый объект и перезаписывается на место в 1 векторе
получается слишком много вызовов конструкторов и деструкторов
2. есть список
std::list<S> list;
list.push_back(S (A, 50));
list.push_back(S (B, 200));
list.push_back(S (C, 300));
list.push_back(S (A, 50));
нужно объединить равные объекты
тоесть должно получиться в списке
S (A, 100);
S (B, 200);
S (C, 300);
3. нужно сделать тоже если они в разных списках
std::list<S> list1;
list1.push_back(S (A, 50));
list1.push_back(S (B, 200));
list1.push_back(S (C, 300));
std::list<S> list2;
list2.push_back(S (A, 50));
list2.push_back(S (E, 500));
тоесть А из второго списка должен объединиться с А из первого списка и удалиться из 2
в результате должно получиться
list1;
S (A, 100);
S (B, 200);
S (C, 300);
list2;
S (E, 500);