Mam strukturę do przechowywania danych
struct TData
{
std::string key;
int data;
};
oraz jakiś kontener do przechowywania wielu obiektów na początek std::vector
std::vector<TData> data;
Chciałbym dodawać do kontenera kolejne dane z uwzględnieniem zasady że "key" jest unikalny w filozofii bazodanowej PRIMARY KEY , jak "key" istnieje to aktualizuje istniejący rekord
Dodanie kolejnego rekordu wymaga przeszukania wszystkich rekordów
Jak poprawić złożoność obliczeniową ?
TData * find(TData &whatFind)
{
for(auto &one: data)
{
if(one.key == whatFind.key)
{
return &one;
}
}
return nullptr;
}
void addRect(TData &rec)
{
TData *tmp=find(rec);
if(!tmp)
{
data.emplace_back(rec);
}
else
{
tmp->data = rec.data;
}
}
int main()
{
TData data1{"key1",1};
addRect(data1);
TData data2{"key2",2};
addRect(data2);
TData data1prim{"key1",11};
addRect(data1prim);
for (auto &one: data)
{
printf("key=%s data=%d\n", one.key.c_str(), one.data);
}
}
https://godbolt.org/z/TWETqadn3
W pascal to bym użył posortowanej TStringList