Как пройтись через map<string, int> благодаря итератору и вектору строк?

130
01 апреля 2019, 05:50

Имеется map<string, int> и vector<string>

Надо пройтись по всем строкам вектора и проверить значения value в map.

void KMPSearch(vector<string> v, string txt)
{
    string pat;
    map<string, int> mp;
    int maxi = -1;
    for(int r = 0; r < v.size(); r++)
    {
        pat = v[r];
        int m =  pat.length();
        int n = txt.length();
        int lps[m];
        int cnt = 0;
        computeLPSArray(pat, m, lps);
        int i = 0; 
        int j = 0;
        while(i < n)
        {
            if(pat[j] == txt[i])
            {
                j++; i++;
            }
            if(j == m)
            {
                cnt++;
                mp[pat]++;
            }
            else if(i < n && pat[j] != txt[i])
            {
                if(j != 0)
                    j = lps[j - 1];
                else
                    i = i + 1;
            }
            if(cnt > maxi) maxi = cnt;
        }
        map<string, int> :: iterator it;
        cout << maxi << endl;
        for(it = v.begin(); it != v.end(); it++)
        {
            string str = v[it];
            if(mp[str] == maxi) cout << str << endl;
        }
    }
}

Вот так пробовал, не получилось

Answer 1

С++ 11:

vector<string> v = {"cc", "bb"};
for (auto x : v) {
    if (mp[x] == 3)
        cout << x << endl;
}

С итератором полностью:

for (std::vector<string>::iterator it = v.begin(); it != v.end(); ++it){
        if (mp[*it] == 3)

А так string str = v[it]; нельзя, поскольку it - это не индекс (при большой нужде можно вычислить индекс как разность it и it.begin)

READ ALSO
не активен QMenuBar [закрыт]

не активен QMenuBar [закрыт]

вот тут лежит мой проект (в src лежат исходники, а в mainProject файл notepad6d11 это собранная версия), проблема: верхняя панель (там где файл поле) не нажимается,...

140
Ошибки с массивом вещественных чисел

Ошибки с массивом вещественных чисел

Выполнял лабораторную работу:

153
QMap&lt;QString, Class*&gt; SIGSEGV при вставке значения

QMap<QString, Class*> SIGSEGV при вставке значения

В проекте создается экземпляр класса DatabaseManagerВ нем я создаю экземпляры класса Database в функции setupNewDatabase

141
Windows API, _set_se_translator

Windows API, _set_se_translator

Будет ли работать _set_se_translator в dll, собранной с флагом /EHa, если подключить такую dll к проекту без такого флага?

129