Объединение (с наложением, пересечением) map на основе "близости" C++
Всем привет!
У меня есть данные, которые хранятся в map<double, string>(Это финансовые данные, double цена, а string имя актива)
Я получаю новые данные в таком же формате. Возник вопрос, как их склеить вместе?
Чтобы при склейке эти string данные делали append (то есть чтобы символы наслаивались друг на друга). Вот примерная иллюстрация:

фишка тут вот в чем, обратите внимание на данные которые приходят, то есть 220.8 лежит "примерно рядом" с 221 и буковка A склеивается с C в одну строку. тоже самое с 219.5.
Не могу придумать как такое сделать. Версия C++ 17
После этой манипуляции мы получаем как бы распределение активов.
UPD Моя попытка решения
#include <iostream>
#include <map>
#include <string>
void show_data_in_console(const std::map<double, std::string>& data)
{
std::cout << "\n\t DATA \n\t" << std::endl;
for (const auto& p : data)
{
std::cout << p.first << " \t" << p.second << std::endl;
}
}
int main()
{
std::map<double, std::string> data;
data = {
{219,"C"},
{220, "C"},
{221, "C"},
};
std::map<double, std::string> new_data;
new_data = {
{219.5, "A"},
{220,"A"},
{220.8,"A"},
{222,"A"},
{223,"A"},
};
for (auto const& v : new_data)
{
if ( data.find(v.first) == data.end() )
{
// not found key so add it
data[v.first] = v.second;
}
else
{
// found key so update it
auto new_value = data.at(v.first);
// append new tpo symbol to old symbol
new_value.append(v.second);
// update data in map
data[v.first] = new_value;
}
}
show_data_in_console(data);
}
Возможно, важное уточнение, ключей в такой штуке может быть много, а вот высота столбика с символами ограничена 24 символами (на картинке выше высота столбика 219 - 2 символа)
UPD 2
все уже придумано до нас :) Ответ на поставленный мной вопрос вот это - https://ru.wikipedia.org/wiki/Квантование_(обработка_сигналов)
Ответы (1 шт):
Заводите multimap с ключем по int32_t или даже int64_t, при помещении в него данных домножайте на 10 в нужной степени. Все "склеится" само.