Мое решение:
std::string token = "Bo"; //first few letters
std::vector<std::string> myVec;
for(std::map<std::string,size_t>::iterator i=myMap.begin();i!=myMap.end();i++)
{
if ( token == i->first.substr(0, token.size()) )
myVec.push_back(i->first);
}
for(std::vector<std::string>::iterator i=myVec.begin();i!=myVec.end();i++ )
std::cout << *i << std::endl;
Выход:
Boat
Boss
Полная демонстрация: http://www.ideone.com/03cps
А если вам нравятся <algorithm>
и <iterator>
, тогда вы можете сделать это вместо этого:
std::vector<std::string> myVec=std::for_each(myMap.begin(),myMap.end(),collector("Bo"));
std::ostream_iterator<std::string> oiterator(std::cout, "\n");
std::copy(myVec.begin(), myVec.end(), oiterator);
Выход:
Boat
Boss
А функтор collector
реализован так:
struct collector
{
std::string token;
std::vector<std::string> keys;
collector(const std::string & token) : token(token) {}
void operator()(const std::pair<std::string,size_t> &p)
{
if ( token == p.first.substr(0, token.size()) )
keys.push_back(p.first);
}
operator std::vector<std::string>() { return keys; }
};
Полная демонстрация: http://www.ideone.com/U1299