Usa il metodo lower_bound per cercare il primo elemento che inizia con 3, e incrementa l'iteratore finché la chiave continua ad iniziare con il prefisso; la cosa si può facilmente incapsulare in un paio di funzioni.
codice:bool startswith(const std::string &s, const std::string &prefix) { return s.rfind(prefix, 0)==0; } template<typename VT> std::size_t count_prefix(const std::map<std::string, VT> &m, const std::string &prefix) { std::size_t count=0; std::map<std::string, VT>::const_iterator it = m.lower_bound(prefix), end=m.end(); while(it!=end && startswith(it->first, prefix)) { ++it; ++count; } return count; }

Rispondi quotando