Russian Qt Forum
Ноябрь 26, 2024, 07:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вектор структур. Поиск элемента по значению поля структуры.  (Прочитано 5538 раз)
Pro100Ferrari
Гость
« : Май 04, 2014, 12:54 »

Всем добрый день. Имеется вектор структур:
Код:
struct MyStruct{
qint32 field;
/*
прочие поля qint32 и QString.
*/
}

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

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Май 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; } );
 
« Последнее редактирование: Май 04, 2014, 13:06 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Pro100Ferrari
Гость
« Ответ #2 : Май 04, 2014, 15:40 »

find_id не видит. Подключил QtAlgorithms, но не помогло.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Май 04, 2014, 15:52 »

find_id не видит. Подключил QtAlgorithms, но не помогло.

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

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Pro100Ferrari
Гость
« Ответ #4 : Май 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
                                                               
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Май 04, 2014, 16:24 »

Новый стандарт у вас не включен.
Добавьте в pro файл проекта строку:
CONFIG += c++11
Записан
Pro100Ferrari
Гость
« Ответ #6 : Май 04, 2014, 17:04 »

Отлично! Все работает. Как тут сказать "Спасибо" в профиль?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.