Powiedz, że mam std::vector<std::string>
z następującą treścią
dog
horse
dog
cat
horse
parrot
Teraz chciałbym policzyć, ile razy każde słowo występuje w wektorze.
Moją pierwszą myślą jest użycie poniższego algorytmu, który jest z grubsza. Chciałem wiedzieć, czy istnieje lepsze podejście.
std::map<std::string , int> map;
for(int i = 0 ; i<vector.size() ; i++)
{
if(map.find(vector[i] != map.end()
{
int c = std::count (vector.begin(), vector.end(), vector[i]);
map[vector[i]] = c; //The item is not in map add it.
}
}
Odpowiedzi:
2 dla odpowiedzi № 1Możesz użyć mapy:
std::map<std::string , int> histogram;
for (const string & s : v) { ++histogram[s]; }
for (const auto & p : histogram)
{
std::cout << "Word "" << p.first << "" occurs " << p.second << " times.n";
}
1 dla odpowiedzi nr 2
Dlaczego nie tylko zwiększyć licznik dla każdego słowa?
for(int i = 0 ; i<vector.size() ; i++)
map[vector[i]]++;
Lub tylko
for (const auto& i : vector)
map[i]++;
Zauważ, że nie jest dobrym pomysłem nadanie zmiennym nazw standardowych kontenerów bibliotecznych.