Hi,
I have a problem getting boost::multi_index_container
work with random-access and with orderd_unique at the same time. (I'm sorry for the lengthly question, but I think I should use an example..)
Here an example: Suppose I want to produce N objects in a factory and for each object I have a demand to fulfill (this demand is known at creation of the multi-index). Well, within my algorithm I get intermediate results, which I store in the following class:
class intermediate_result
{
private:
std::vector<int> parts; // which parts are produced
int used_time; // how long did it take to produce
ValueType max_value; // how much is it worth
};
The vector parts
descibes, which objects are produced (its length is N and it is lexicographically smaller then my coresp demand-vector!) - for each such vector I know the used_time as well. Additionally I get a value for this vector of produced objects.
I got another constraint so that I can't produce every object - my algorithm needs to store several intermediate_result
-objects in a data-structure. And here boost::multi_index_container
is used, because the pair of parts
and used_time
describes a unique intermediate_result
(and it should be unique in my data-structure) but the max_value
is another index I'll have to consider, because my algorithm always needs the intermediate_result
with the highest max_value
.
So I tried to use boost::multi_index_container
with ordered_unique<>
for my "parts&used_time-pair" and ordered_non_unique<>
for my max_value
(different intermediate_result
-objects may have the same value).
The problem is: the predicate, which is needed to decide which "parts&used_time-pair" is smaller, uses std::lexicographical_compare
on my parts
-vector and hence is very slow for many intermediate_result
-objects.
But there would be a solution: my demand for each object isn't that high, therefore I could store on each possible parts-vector the intermediate results uniquely by its used_time
.
For example: if I have a demand-vector ( 2 , 3 , 1)
then I need a data-structure which stores (2+1)*(3+1)*(1+1)=24
possible parts-vectors and on each such entry the different used_times, which have to be unique! (storing the smallest time is insufficient - for example: if my additional constraint is: to meet a given time exactly for production)
But how do I combine a random_access<>
-index with an ordered_unique<>
-index?
(Example11 didn't help me on this one..)