Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2004-11-18 16:09:44


Chris Goller <cgoller_at_[hidden]> writes:

> I'm just getting into boost and I really like it.
>
> I would like to iterate over keys of a multimap.
>
> so it would look like this:
>
>
> std::multimap<type, type>::key_iterator i = map.beginkey(); i !=
> map.endkey(); i++
> at each i++ it would move to the next key.
>
> -or-
>
> for_each(map.beginkey(), map.endkey(), whatever);
>
>
> Is this possible with the boost iterators?

You can't use that syntax, because there's no way to inject a
key_iterator member into std::multimap. You could use a
transform_iterator over the multimap's native iterator with select1st,
defined as:

struct select1st
{
    template <class T, class U>
    T& operator()(std::pair<T,U>& p) const
    { return p.first }

    template <class T, class U>
    T const& operator()(std::pair<T,U> const& p) const
    { return p.first }
};

HTH,

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com

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