Re: [boost] [range] for_each and std::map of std::list

Den 06-04-2011 16:03, Mark Snelling skrev:
Hi,
Consider a map defined as...
std::map< int, std::list< std::string > > my_map;
I'm wondering if/how it's possible to use Boost.Range to call a function on each std::string in each of the lists contained in the map. I have an implementation below which works using a C++0x lambda function but am curious if this can be done purely using Boost.Range?
boost::for_each( boost::adaptors::values( my_map), []( const std::list< std::string >& my_list ) { boost::for_each( my_list, some_func ); } );
ideas anyone?
What we need is a generic range adaptor that can make a container of containers look like a "flat" sequence. I suggest the syntax rngOfContainers | boost::adaptors::flattened and the underlying iterator should be up to bidirectional (if the underlying two container types support it). Anyone interested in implementing this? -Thorsten

What we need is a generic range adaptor that can make a container of containers look like a "flat" sequence.
I suggest the syntax
rngOfContainers | boost::adaptors::flattened
and the underlying iterator should be up to bidirectional (if the underlying two container types support it).
Anyone interested in implementing this?
I've been interested in implementing something similar for a while. I was thinking slightly more generally that any n-dimensional structure can often be linearised or projected into a linear sequence. Hence this would enable not just the above example to work, but many standard algorithms could work with tree structures, hyper-cube trees, directed acyclic graphs etc. I've implemented a number of these already, but wanted to gain experience with them in my own projects before committing them to the trunk.
-Thorsten
Regards, Neil Groves

Den 06-04-2011 22:55, Neil Groves skrev:
I've been interested in implementing something similar for a while. I was thinking slightly more generally that any n-dimensional structure can often be linearised or projected into a linear sequence. Hence this would enable not just the above example to work, but many standard algorithms could work with tree structures, hyper-cube trees, directed acyclic graphs etc. I've implemented a number of these already, but wanted to gain experience with them in my own projects before committing them to the trunk.
Cool. I have a little problem seeing how it works with acyclic graphs. For example, there are many ways to do this. Which one do we pick? I think the container of containers case meets 90% or more of all use cases. A container of containers of containers can be done manually by applying it twice. Even trees, surely they provide some kind of iteration already? (Like std::map/std::set). So what is special here? -Thorsten
participants (2)
-
Neil Groves
-
Thorsten Ottosen