Re: copy from keys from multimap into the vector
On Wed, 29 Oct 2008 12:33:38 -0700, puzzlecracker wrote:
I am using while loop for that but I am sure you can do it quicker and
more syntactically clear with copy function.
Here is what I do and would like to if someone has a cleaner solution:
vector<string> vec;
multimap<stirng, int> myMap
// populate myMap
multimap<string, int >::iterator iter = myMap.begin();
while(iter != myMap.end())
{
vec.push_back(iter->first)
}
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <iostream>
template<typename C, typename M>
class key_inserter :
public std::iterator<std::output_iterator_tag,void,void,void,void> {
private:
C & d_coll;
public:
key_inserter(C & c) : d_coll(c) {}
key_inserter & operator*() { return *this; }
key_inserter & operator++() { return *this; }
key_inserter & operator++(int) { return *this; }
key_inserter &
operator=(typename M::value_type const & p) {
d_coll.push_back(p.first);
return *this;
}
};
template<typename C, typename M>
key_inserter<C,M> make_key_inserter(C & c, M & m) {
return key_inserter<C,M>(c);
}
int main() {
std::vector<int> v;
std::map<int,int> m;
m[0];m[1];m[2];m[6];
std::copy(m.begin(),
m.end(),
make_key_inserter(v,m));
std::copy(v.begin(),
v.end(),
std::ostream_iterator<int>(std::cout,"\n"));
return 0;
}
--
OU
Remember 18th of June 2008, Democracy died that afternoon.
http://frapedia.se/wiki/Information_in_English