День добрый. Не знаю на сколько грамотно придумал, может поправите.
Пытаюсь сделать сводную таблицу по данным из БД по 4 строкам и структурой в качестве значения.
Объявил такие типы.
struct pivot_entry
{
uint32_t nCnt;
double fSum;
double fPart;
std::unordered_map<double, std::wstring> mStrings;
};
typedef std::unordered_map<std::wstring, std::unordered_map<std::wstring, std::unordered_map<std::wstring, std::unordered_map<std::wstring, pivot_entry>>>> pivot_map;
Идея была в том, что при получении очередной записи из БД поочередно искать в мапах ключ/строку и если не нашли, то добавлять новую, что-то типа такого:
// look for Fld1
auto itFld1 = pm->find(pwszFld1);
if (itFld1 != pm->end())
{
// look for Fld2
auto itFld2 = itFld1->second.find(pwszFld2);
if (itFld2 != itFld1->second.end())
{
// look for Fld3
auto itFld3 = itFld2->second.find(pwszFld3);
if (itFld3 != itFld2->second.end())
{
// look for Fld4
auto itFld4 = itFld3->second.find(pwszFld4);
if (itFld4 != itFld3->second.end())
{
// pivot_entry already exists - just update it
}
else
{
// add new pivot_entry from Fld4
}
}
else
{
// add new pivot_entry from Fld3
}
}
else
{
// add new pivot_enrty from Fld2
}
}
else
{
// add new pivot_entry from Fld1
pm->emplace(pwszFld1, std::unordered_map<pwszFld2, std::unordered_map<pwszFld3, std::unordered_map<pwszFld4, >>>());
}
Подскажите как собственно добавлять новую запись, желательно через emplace()
PS. И вообще может есть другие — более элегантные способы сделать сводную таблицу по данным из ДБ (в своем коде). Делать group by запросом не подходит...