Upraszczając kod mokrowskiego:
AnsiString tab[] = { "tekst1", "tekst2", "tekst2", "tekst3", "tekst4", "tekst1" };
map<AnsiString, int> m;
for(auto &s : tab) m[s]++;
for(auto &i : m)
{
cout << i.first << " - " << i.second << '\n';
}
tab może być tablicą, jak w przykładzie, lub innym STL-owym kontenerem.
--- dodane ---
Tu masz wersję zachowującą kolejność elementów:
AnsiString tab[] = { "tekst1", "tekst2", "tekst2", "tekst3", "tekst4", "tekst1" };
using map_t = map<AnsiString, int>;
using vec_t = vector<map_t::iterator>;
map_t m;
vec_t v;
for(auto &s : tab)
{
auto res = m.insert({s, 1});
if(res.second) v.push_back(res.first);
else ++res.first->second;
}
for(auto &i : v)
{
cout << i->first << " - " << i->second << '\n';
}