Need advice to choise complex data structure (STL)

S

Sigmathaar

Hi, I'm need some advice about lists and vectors. I'm doing a program
who needs to have sequential access of a non ordered unit of objects
whose size decreases almost each time the sequence is finished (at the
begining I have about 2500 objects in the unit, after the first acces I
have 2499, then 2435, then 1720 and so on).

The problem is that sometimes after a whole sequence the number of
objects in the unit remains unchanged. After some calculations it seems
that for those 2500 objets I'll need to acces about 180 000 objects
(about 20 acces per object in my unit). The objects in my unit have an
attribute which is used in the whole program as some kind of index.

I was thinking of using a list since I needed sequential acces then I
though of using a multimap which allows me to use de index and stop
using sequential acces but I'm not really sure.

Can somebody give me some advice about the best data structure to use
in my case?

Thanks
 
B

Bob Hairgrove

Hi, I'm need some advice about lists and vectors. I'm doing a program
who needs to have sequential access of a non ordered unit of objects
whose size decreases almost each time the sequence is finished (at the
begining I have about 2500 objects in the unit, after the first acces I
have 2499, then 2435, then 1720 and so on).

The problem is that sometimes after a whole sequence the number of
objects in the unit remains unchanged. After some calculations it seems
that for those 2500 objets I'll need to acces about 180 000 objects
(about 20 acces per object in my unit). The objects in my unit have an
attribute which is used in the whole program as some kind of index.

I was thinking of using a list since I needed sequential acces then I
though of using a multimap which allows me to use de index and stop
using sequential acces but I'm not really sure.

Can somebody give me some advice about the best data structure to use
in my case?

Thanks

Since you haven't told us what your "sequence" actually does, we can't
really say. I think almost all of the STL containers support forward
iterators for the kind of sequential access that you describe, but
there might be some that don't.

You say the container is unordered, so a map or multimap might not be
the most efficient solution. An implementation of std::map will most
likely keep the data sorted by key to ensure fastest access.

Vectors must store their data in a contiguous memory block. Since it
sounds like you will be doing a lot of deletions at various places
within the vector, this will cause the vector to do a lot of copying
of objects and re-arranging them.

Without knowing more details as to what you are actually doing, I
would say that std::list would probably work OK and also be the most
efficient for deletions and insertions.
 
S

Sigmathaar

The program creates a directory tree from a unit of objects, each
object has the next attribute :

- father : used as an idex, this is the name of the folder that
contaits the folder of the object. if father=0 the object is the root.

The data structure contains all the objects and I have a list of
"fathers". For each "father" the program will locate the "sons" and put
them into a list. After that the program creates one folder per son
into their respective father folder (ex : something/father/son). Every
time a son is located in the object list the object containing it is
destroyed (we only care about the name) that's why the number of object
decreases. Sometimes one "father" may not have a "son" if that's the
case the object list will remain unchanged. The size of the unit of
objects will decrease until there is no more objects left.

Knowing this which data structure will be the best one : a list of a
map (eventually a multimap) or something else?
 
B

Bob Hairgrove

The program creates a directory tree from a unit of objects, each
object has the next attribute :

- father : used as an idex, this is the name of the folder that
contaits the folder of the object. if father=0 the object is the root.

The data structure contains all the objects and I have a list of
"fathers". For each "father" the program will locate the "sons" and put
them into a list. After that the program creates one folder per son
into their respective father folder (ex : something/father/son). Every
time a son is located in the object list the object containing it is
destroyed (we only care about the name) that's why the number of object
decreases. Sometimes one "father" may not have a "son" if that's the
case the object list will remain unchanged. The size of the unit of
objects will decrease until there is no more objects left.

Knowing this which data structure will be the best one : a list of a
map (eventually a multimap) or something else?

I would use std:list for this.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,832
Latest member
GlennSmall

Latest Threads

Top