Boost logo

Boost :

From: Jeremy Siek (jsiek_at_[hidden])
Date: 2001-12-09 22:11:33


Which reminds me, could we get selectNth added to the Boost.Functional
library as well?

Cheers,
Jeremy

On Sun, 9 Dec 2001, Dan Gohman wrote:

> On Wed, Dec 05, 2001 at 12:52:01PM -0500, Jeremy Siek wrote:
> >
> > Sounds like a good idea to me!
>
> Ok, here's an initial implementation of a select_iterator
> which uses projection_iterator to iterate over a sequence
> of tuples, selecting elements at a specified index.
>
> It works for me on GCC 2.95.4 and 3.0.2 . I used
> boost::remove_reference to handle tuples with references,
> and std::iterator_traits, and both apparently are
> portability concerns.
>
> Dan
>
>
> template<int N, typename TupleIterator>
> class select_iterator_generator {
>
> typedef typename std::iterator_traits<TupleIterator>::value_type select_value_type;
> typedef typename boost::remove_reference<typename boost::tuples::element<N, select_value_type>::type>::type select_result_type;
>
> struct select : public std::unary_function<select_argument_type, select_result_type>
> {
> select_result_type& operator()(select_argument_type& t) const
> { return boost::tuples::get<N>(t); }
> };
>
> public:
> typedef typename boost::projection_iterator_generator<select, TupleIterator>::type type;
> };
>
> template<int N, typename TupleIterator>
> typename select_iterator_generator<N, TupleIterator>::type
> make_select_iterator(TupleIterator base)
> {
> typedef typename select_iterator_generator<N, TupleIterator>::type result_t;
> return result_t(base);
> }
>
>
> // example usage:
>
> vector<boost::tuple<int, string> > x;
> x.push_back(boost::make_tuple(11, string("eleven")));
> x.push_back(boost::make_tuple(12, string("twelve")));
> x.push_back(boost::make_tuple(10, string("ten")));
>
> // sorts the ints, leaves the strings alone.
> sort(make_select_iterator<0>(x.begin()),
> make_select_iterator<0>(x.end()));
>
> --
> Dan Gohman
> gohmandj_at_[hidden]
>
> Info: http://www.boost.org Send unsubscribe requests to: <mailto:boost-unsubscribe_at_[hidden]>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>

----------------------------------------------------------------------
 Jeremy Siek http://www.osl.iu.edu/~jsiek/
 Ph.D. Student, Indiana Univ. B'ton email: jsiek_at_[hidden]
 C++ Booster (http://www.boost.org) office phone: (812) 855-3608
----------------------------------------------------------------------


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk