Boost logo

Boost Users :

From: Alexander Shyrokov (shirokov_at_[hidden])
Date: 2006-10-13 12:04:14


I have a vector of strings and I have a map that maps one string to
another. How can use transform for that?

This is how I do it right now:

map<string, string> mapping;
vector<string> strings;
for(vector<string>::iterator s=strings.begin();s!=strings.end();++s)
        *s=mapping[*s];

I would like something like:
transform(strings.begin(),strings.end(),strings.begin(),_1=mapping[_1]);

Or maybe there is a predicate that already does it? I can write my own:
template<T> struct mapit: public unary_function<T,T>
{
        map<T,T> mapping;
        mapit(const map<T,T>& m):mapping(m){}
        T operator()(const T& s){return mapping[s];}
}

transform(strings.begin(),strings.end(),strings.begin(),mapit<string>(mapping));

Is it the proper way to do such a transformation?

Thanks.

-- 
Regards,
     Alexander.                http://sjcomp.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