/ / Liczenie wystąpień słowa w wektorze - c ++, wektor

Zliczanie występowania słowa w wektorze - c ++, wektor

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 № 1

Moż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.