Поиск значения в std::vector

136
28 апреля 2019, 15:40

Я создал следующую структуру

struct Datas
{
    std::string DataName;
    std::vector<boost::variant<std::string, int, double>> Data;
};
struct Topic
{
    std::string TopicName;
    std::vector<Datas> DataList;
};
struct Group
{
    std::string NodeName;
    std::vector<Topic> TopicList;
};
....
std::vector<Group> test;

можно ли искать какие ли данные через std::find?

Answer 1

Поиск в векторе с элементами пользовательского типа возможен - через find с помощью оператора равенства, или find_if с предоставлением предиката поиска.

Пример - далее.

struct Test
{
    string name;
    vector<int> data;
    bool operator==(const Test& t)
    {
        return name == t.name;
    }
};
int main(int argc, const char * argv[])
{
    vector<Test> v{ {"a",{1,2,3}}, {"b",{4,5,6}}, {"c",{7,8,9}} };
    // Поиск с использованием оператора равенства (ищем с name=="b")
    if (auto t = find(v.begin(),v.end(),Test{"b",{}}); t != v.end())
    {
        for(auto i: t->data) cout << i << " ";
        cout << endl;
    }
    // Поиск с использованием предиката - тот, где первый элемент data - 7
    if (auto t = find_if(v.begin(),v.end(),
                         [](const Test& q){ return q.data.size()>0 && q.data[0] == 7; });
        t != v.end())
    {
        for(auto i: t->data) cout << i << " ";
        cout << endl;
    }
}
READ ALSO
Удаление строк в QTableView

Удаление строк в QTableView

Столкнулся с одной проблемойУ меня есть таблица, в которой по нажатию кнопок можно добавлять, вставлять между существующих строк и удалять...

194
Перехват данных из USB-HID картридера

Перехват данных из USB-HID картридера

Есть картридер для чтения карт с магнитной полосойОперационная система его "задействует" как клавиатуру

139
c++: работа с битами в массивах

c++: работа с битами в массивах

Подскажите пожалуйста, есть ли в новых версиях стандарта c++ или в стандартной библиотеке функционал работы с битами в больших массивах данных

150
Javafx. Не работает ComboBox из класса Controller

Javafx. Не работает ComboBox из класса Controller

Для JavaFX-приложения использую связку: Сontrollerjava, Main

144