#include <iostream>
#include <tuple>
#include <map>
using namespace std;
typedef size_t id_t,group_t;
typedef unsigned count_t;
typedef double amount_t;
typedef string name_t;
typedef tuple<id_t,name_t,group_t> key_t;
typedef pair<count_t,amount_t> value_t;
typedef map<key_t,value_t> map_t;
void add(map_t &map,const key_t &key,const value_t &value)
{
value_t &dst=map[key];
dst.first+=value.first;
dst.second+=value.second;
}
int main()
{
map_t map;
add(map,key_t(12,"two",2),value_t(10,13.5));
add(map,key_t(12,"four",4),value_t(10,13.5));
add(map,key_t(11,"two",2),value_t(10,13.5));
add(map,key_t(10,"one",1),value_t(10,13.5));
add(map,key_t(12,"two",2),value_t(10,13.5));
add(map,key_t(10,"two",2),value_t(10,13.5));
add(map,key_t(11,"one",1),value_t(10,13.5));
add(map,key_t(12,"two",2),value_t(10,13.5));
add(map,key_t(11,"four",4),value_t(10,13.5));
for(const auto &pair:map)
{
cout<<get<0>(pair.first)<<","<<get<1>(pair.first)<<" => "<<pair.second.first<<" / "<<pair.second.second<<endl;
}
return 0;
}
lub
#include <iostream>
#include <tuple>
#include <map>
using namespace std;
typedef size_t id_t,group_t;
typedef unsigned count_t;
typedef double amount_t;
typedef string name_t;
typedef tuple<id_t,name_t,group_t> key_t;
typedef pair<count_t,amount_t> value_t;
typedef map<key_t,value_t> map_t;
value_t &operator+=(value_t &value,const value_t &add)
{
value.first+=add.first;
value.second+=add.second;
return value;
}
int main()
{
map_t map;
map[key_t(12,"two",2)]+=value_t(10,13.5);
map[key_t(12,"four",4)]+=value_t(10,13.5);
map[key_t(11,"two",2)]+=value_t(10,13.5);
map[key_t(10,"one",1)]+=value_t(10,13.5);
map[key_t(12,"two",2)]+=value_t(10,13.5);
map[key_t(10,"two",2)]+=value_t(10,13.5);
map[key_t(11,"one",1)]+=value_t(10,13.5);
map[key_t(12,"two",2)]+=value_t(10,13.5);
map[key_t(11,"four",4)]+=value_t(10,13.5);
for(const auto &pair:map)
{
cout<<get<0>(pair.first)<<","<<get<2>(pair.first)<<" => "<<pair.second.first<<" / "<<pair.second.second<<endl;
}
return 0;
}