Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Pro100Ferrari от Мая 04, 2014, 12:54



Название: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: Pro100Ferrari от Мая 04, 2014, 12:54
Всем добрый день. Имеется вектор структур:
Код:
struct MyStruct{
qint32 field;
/*
прочие поля qint32 и QString.
*/
}

QVectror<MyStruct> vector;
Вектор заполняется членами структуры.
Проблема в том, как найти в векторе член структуры по полю field?
Например, мне нужен член структуры со значением поля field = 15;
Если бы вектор был просто заполнен числами, а не членами структуры, то было бы понятно как найти нужный элемент.
Искал решение вопроса. Нашел, что нужно будет использовать функторы.
Потом нужно будет еще перегружать операцию сравнения.
Какие у вас есть предложения по решению вопроса?


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: m_ax от Мая 04, 2014, 13:02
Зачем функторы..
Лямбды же есть)

Код
C++ (Qt)
int field = 15;
auto it = find_if(vector.begin(), vector.end(), [&](const MyStruct & s)->bool { return s.field == field; } );
 


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: Pro100Ferrari от Мая 04, 2014, 15:40
find_id не видит. Подключил QtAlgorithms, но не помогло.


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: m_ax от Мая 04, 2014, 15:52
find_id не видит. Подключил QtAlgorithms, но не помогло.

Конечно, в QtAlgorithms её просто нет)

алгоритм std::find_if из стандартной библиотеки..
#include <algorithm>
 


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: Pro100Ferrari от Мая 04, 2014, 16:13
Все равно не компилируется.
На такой код
Код:
    auto it = std::find_if(vector.begin(), vector.end(), [&](const OneRecord & s)->bool { return s.code == field; } );
выдает ошибки:
'it' does not name a type
expected primary-expression before ')' token
expected ';' before ')' token
                                                               


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: Old от Мая 04, 2014, 16:24
Новый стандарт у вас не включен.
Добавьте в pro файл проекта строку:
CONFIG += c++11


Название: Re: Вектор структур. Поиск элемента по значению поля структуры.
Отправлено: Pro100Ferrari от Мая 04, 2014, 17:04
Отлично! Все работает. Как тут сказать "Спасибо" в профиль?