error: no match for 'operator[]

138
05 мая 2022, 20:00

Ошибка возникла на первом cout, полный текст ошибки:

error: no match for 'operator[]' (operand types are 'std::vectorstd::pair<std::__cxx11::basic_string<char, int> >' and 'std::pairstd::__cxx11::basic_string<char, int>')|

int ss = 0;
string st1, k = "";
cin >> st1;
vector <pair<string, int>> h(1000);
for (int i = 0; i < st1.size(); i++)
{
    if (st1[i] == '*')
    {
        h[ss].first = k;
        h[ss].second = (st1.find(k));
        k = "";
        ss++;
        continue;
    }
    k += st1[i];
}
for (auto i: h)
{
    cout << h[i].first() << "\n";
    cout << h[i].second() << "\n";
}
Answer 1

Уверен, что Вы заметили что этот цикл

for (int i = 0; i < st1.size(); i++)

отличается от этого

for (auto i: h)

Циклы, подобные второму, появились в С++11. Такой цикл называется "цикл основанный на диапазоне". Что он делает? Он по очереди инициализирует переменную i всеми значениями из контейнера h. В Вашем векторе хранятся элементы типа pair<string,int>. Значит и i имеет этот тип, поэтому выводить нужно так:

for (auto i: h)
{
    cout << i.first << "\n";
    cout << i.second << "\n";
}
READ ALSO
Создать иерархию

Создать иерархию

Тема наследованиеЗадача -Разработать иерархическую структуру классов для обработки данных

252
Qt, потоки и объекты. Как правильно?

Qt, потоки и объекты. Как правильно?

Я много читал о том, как работать с потоками в QtКто-то наследуется от QThread и переопределяет void run();, кто-то наследует класс worker от QObject, связывает...

264
проблема в подсчёте слов

проблема в подсчёте слов

Есть код который подсчитывает кол-во символов и слов в переменной $textС подсчётом символов всё хорошо , но с подсчётом слов есть один баг(фича)

146