Поиск вектора внутри другого вектора - PullRequest
2 голосов
/ 16 апреля 2019

Я хочу провести тщательный поиск вектора, чтобы увидеть, появляется ли элемент. Как только этот элемент появляется вместе с другими, я хочу провести повторный поиск в оригинале, чтобы увидеть, появляется ли этот второй элемент где-то еще внутри вектора. Конечный результат должен показать первый найденный элемент, а затем информацию о том, где появляется второй элемент.

void searchband()
{

    ifstream artist("newartist.txt");
    string SBand;
    cout << "Please enter the band you want to seach" << endl;
    cin >> SBand;
    system("CLS");
    while (artist >> forname >> surname >> bandnum)
    {

        band.clear();
        for (int i = 0; i < bandnum; i++)
        {
            string tmp;
            artist >> tmp;
            band.push_back(tmp);
        }
        artist >> role;
        if (find(band.begin(), band.end(), SBand) != band.end())
        {


            cout << forname << " " << surname << endl;
            cout << "Played for: ";
            ostream_iterator<string> output_iterator(cout, " ");
            copy(band.begin(), band.end(), output_iterator);
            cout << " " << endl;
            cout << " " << endl;
            newband = band;

        }
            if (find(band.begin(), band.end(), newband) != band.end())
            {


                cout << forname << " " << surname << endl;
                cout << "Played for: ";
                ostream_iterator<string> output_iterator(cout, " ");
                copy(band.begin(), band.end(), output_iterator);
                cout << " " << endl;
                cout << " " << endl;

            }
            system("pause");
            cin.get();
            main();

    }
}

Получается код ошибки

ошибка C2678: двоичный файл '==': не найден оператор, который принимает левый операнд типа std::basic_string<char,std::char_traits<char>,std::allocator<char>> (или нет приемлемого преобразования)

Я думаю, это может быть потому, что

vector<string> = newband

но это единственный способ передать векторную информацию - это другой вектор

1 Ответ

3 голосов
/ 16 апреля 2019

std::find_first_of делает то, что вы ищете:

Поиск диапазона [first, last) для любого из элементов в диапазоне [s_first, s_last).

Пример (также взят из cppreference ):

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 2, 3, 25, 5};
    std::vector<int> t{3, 19, 10, 2};

    auto result = std::find_first_of(v.begin(), v.end(), t.begin(), t.end());

    if (result == v.end()) {
        std::cout << "no elements of v were equal to 3, 19, 10 or 2\n";
    } else {
        std::cout << "found a match at "
                  << std::distance(v.begin(), result) << "\n";
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...