Boost logo

Boost Users :

Subject: Re: [Boost-users] Iterators for the cartesian product
From: Larry Evans (cppljevans_at_[hidden])
Date: 2011-06-13 16:25:54


On 06/13/11 15:06, kelvSYC wrote:
>
> On Jun 13, 2011, at 8:19 AM, Larry Evans wrote:
>
>> On 06/13/11 06:37, kelvSYC wrote:
>>> So that the wheel doesn't have to be reinvented if it's already out
>>> there, is there something in boost that will take a bunch of
>>> sequences (lists, say) and return a sequence containing the
>>> cartesian product all of them, either as a tuple or after applying a
>>> function to them?
>>
>>> For example, is there something in boost that will, given a bunch of
>>> lists of integers, return a list of integers formed by multiplying
>>> together one member from each list?
>>
>> To be more concrete, say you have:
>>
>> std::vector<int> x({1,2,3});
>> std::vector<int> y({4,5});
>>
>> and what you want is something like:
>>
>> std::vector<std::vector<int> > z
>> ( { { 4, 5}
>> , { 8, 10}
>> , { 12, 15}
>> }
>> };
>>
>> Is that about right?
>
> No, just a straight up cartesian product.

The example I provided was meant to be an example of, as you say,
"applying a function to them". In my example, that would be
the std::multiply<int>() functor. The "straight up cartesian product"
would be produced by using std::make_pair<int,int> as the function.

> So I'd want z to be equal to
>
> std::vector<std::vector<int>>({{1,4}, {1,5}, {2,4}, {2,5}, {3,4}, {3,5}});
>
> Is there something in boost that will give me this sequence (or at least iterators therein?)

I pretty sure there is none since the thread I mentioned previously did
not mention one and people replying to that thread indicated it would
be desirable.

-regards,
Larry


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