find () не возвращает значение int, которое можно использовать, и выдает ошибку перед компиляцией - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь получить значение индекса для нового созданного вектора, но функция find () не позволяет мне присвоить переменную с возвращенным значением указанного find ()

Я пыталсячтобы присвоить значение в других местах, поиграйтесь с начальной и конечной точками, но программа просто не будет назначать tempind со значением find ().

void count_city(vector<string> city, vector<string> state) {
    vector<string> cities(4);
    vector<int> counted(4);
    string temp = " ";
    int tempind = 0;

    for (int i = 0; i < city.size(); i++) {
        temp = city.at(i);
        if (find(cities.begin(), cities.end(), temp) != cities.end()) {
            continue;
        }

        else {
            cities.push_back(temp);
        }

        tempind = (find(cities.begin(), cities.end(), temp));
        counted.at(tempind) = count(city.begin(), city.end(), temp);
    }
}

Я просто хочу, чтобы tempind был индексомгорода в векторных городах, однако он не позволяет мне компилироваться и выдает ошибку, в которой говорится, что мой тип не совпадает.

1 Ответ

2 голосов
/ 26 сентября 2019

std::find() возвращает итератор, а не индекс.Если вам нужен индекс, вы можете передать итератор на std::distance():

auto found = find(cities.begin(), cities.end(), temp);
tempind = distance(cities.begin(), found);

Но в этом случае вам вообще не нужно find() индексировать вообще.Поскольку push_back() вставляет в конец вектора, нужный вам индекс - это размер вектора перед push_back() в нем:

for (int i = 0; i < city.size(); i++) {
    temp = city[i];
    if (find(cities.begin(), cities.end(), temp) != cities.end()) {
        continue;
    }

    tempind = cities.size();
    cities.push_back(temp);

    counted.at(tempind) = count(city.begin(), city.end(), temp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...