|
Boost Users : |
From: Sebastien Fortier (sebastien.fortier_at_[hidden])
Date: 2006-08-08 08:58:54
I will try to make this as simple as possible,
I have the following struct
struct meteo_record {
public:
[...ctor...]
[...getters and setters...]
private:
string var_name;
string grid_type;
float ip1;
float ip2;
float ip3;
float ig1;
float ig2;
float ig3;
int ip1Kind;
int data_key;
};
All these attributes are non-unique except for the data_key which is not
a sorting criteria.
What I need to do is to be able to iterate over the whole set by certain
criteria.
lets say I have the following records
[var_name grid_type ip1 ip2 ip3 ig1 ig2 ig3 ip1kind]
>> 12345 12 34 5 0 0
0 1
^^ 12345 12 34 5 0 0
0 1
GZ 12345 645 24 1 12 34
5 1
GZ 12345 646 24 1 12 34
5 1
GZ 12345 647 24 1 12 34
5 1
GZ 12345 645 24 1 12 34
5 2
GZ 12345 646 24 1 12 34
5 2
GZ 12345 647 24 1 12 34
5 2
GZ 12345 645 26 1 12 34
5 1
GZ 12345 646 26 1 12 34
5 1
GZ 12345 647 26 1 12 34
5 1
GZ 12345 645 26 1 12 34
5 2
GZ 12345 646 26 1 12 34
5 2
GZ 12345 647 26 1 12 34
5 2
TT 12345 645 24 1 12 34
5 1
TT 12345 646 24 1 12 34
5 1
TT 12345 647 24 1 12 34
5 1
TT 12345 645 24 1 12 34
5 2
TT 12345 646 24 1 12 34
5 2
TT 12345 647 24 1 12 34
5 2
TT 12345 645 26 1 12 34
5 1
TT 12345 646 26 1 12 34
5 1
TT 12345 647 26 1 12 34
5 1
TT 12345 645 26 1 12 34
5 2
TT 12345 646 26 1 12 34
5 2
TT 12345 647 26 1 12 34
5 2
[...same sequence again with different grid_type...]
>> 33345 33 34 5 0 0
0 1
^^ 33345 33 34 5 0 0
0 1
TT 33345 647 26 1 33 34
5 2
[...]
the grid_type is derived from ip1 ip2 and ip3 in some cases and from ig1
ig2 and ig3 in some other cases
my criterias are
*sort by same _gryd_type_ group by _var_name_ with same _ip2_ and same
_ip1kind_ ordered on _ip1_*
What I have done is create a multi_index with the grid_type as an index
and then I created views for all the other attributes.
I first iterate over the grid_types and keep the unique ones in an array
(only the keys) /// probably the wrong way to do this
in this case I would keep 12345 and 33345
/// for (recordIter = set.begin(); recordIter != set.end(); recordIter =
set.upper_bound( (*recordIter)->getgrid_type() ) ) ///
/// returns only one of each duplicate grid_type ///
for each grid_type I then create the var_name view and iterate over the
unique var_names and so on and so on... until i get a grouping that
looks like this
[var_name grid_type ip1 ip2 ip3 ig1 ig2 ig3 ip1kind]
GZ 12345 645 24 1 12 34
5 1
GZ 12345 646 24 1 12 34
5 1
GZ 12345 647 24 1 12 34
5 1
Once I get a grouping like this one, I extract the data_key for each
record and read the data from a file. Then I construct a matrix for this
grouping from the corresponding data that was read.
There must be a better way of doing this, any help will be greatly
appreciated!
-- Sébastien Fortier
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net