Sinds een aantal maanden ben ik bezig met een programma waarin als belangrijk onderdeel een tijdbalk is verwerkt. Op deze tijdbalk staan verschillende sporen. Bepaalde sporen hebben weer dingen als blokjes, cues en weet ik veel wat voor items erop staan.
Nu zit ik me eigenlijk een beetje af te vragen wat nou het meest efficiënt is om die items in op te slaan: het is belangrijk dat ik snel kan zien welke items er op een bepaald tijdstip op de tijdbalk al dan niet aanwezig zijn, welke het dichtste bij zijn, en als het even kan wil ik er ook nog sequentieel dorheen lopen voor serialisatie later.
Nu kan ik het op een aantal manieren aanpakken. Hieronder de eerste manier, die ik nu gebruik en verder prima werkt:
Het nadeel is dat ik om te kijken welke cues er op een bepaald tijdstip 'in de buurt' zijn minstens alle elementen in de vector moet doorlopen. Een andere optie zou zijn geweest:
Hoewel je nu snel een cue op een bepaald tijdstip kunt ophalen, kun je niet snel (althans, zonder iterators zoals bij de vorige oplossing) zien welke cues in de buurt zijn. Daarnaast is het verplaatsen van een cue (met drag & drop bijvoorbeeld in de UI) niet makkelijk: als je een CUe verplaatst van t=x naar t=y dan moet je eerst de entry in de map van t=x verwijderen en vervolgens een nieuwe entry toevoegen.
Wat is de slimste manier om objecten in (indien mogelijk) STL-containers op te slaan bij dit soort structuren?
Nu zit ik me eigenlijk een beetje af te vragen wat nou het meest efficiënt is om die items in op te slaan: het is belangrijk dat ik snel kan zien welke items er op een bepaald tijdstip op de tijdbalk al dan niet aanwezig zijn, welke het dichtste bij zijn, en als het even kan wil ik er ook nog sequentieel dorheen lopen voor serialisatie later.
Nu kan ik het op een aantal manieren aanpakken. Hieronder de eerste manier, die ik nu gebruik en verder prima werkt:
C++:
1
2
3
4
5
6
| struct Cue { Time _time; int _value; }; std::vector<Cue> _cues; |
Het nadeel is dat ik om te kijken welke cues er op een bepaald tijdstip 'in de buurt' zijn minstens alle elementen in de vector moet doorlopen. Een andere optie zou zijn geweest:
C++:
1
| std::map<Time, int> _cues; |
Hoewel je nu snel een cue op een bepaald tijdstip kunt ophalen, kun je niet snel (althans, zonder iterators zoals bij de vorige oplossing) zien welke cues in de buurt zijn. Daarnaast is het verplaatsen van een cue (met drag & drop bijvoorbeeld in de UI) niet makkelijk: als je een CUe verplaatst van t=x naar t=y dan moet je eerst de entry in de map van t=x verwijderen en vervolgens een nieuwe entry toevoegen.
Wat is de slimste manier om objecten in (indien mogelijk) STL-containers op te slaan bij dit soort structuren?