Vishal Bhatia0112 Ответов: 3

Как искать в векторе структуры по структурному атрибуту?


У меня есть вектор структуры, который сортируется на основе переменной.

Например:
структура клиента {
строковое имя;
инт sm_index;
инт client_id;
инт ид_пользователя;
}

Сортируется на основе sm_index.

Как я могу найти и извлечь данные той struture, чей sm_index соответствует нашей целевой структуре?

У нас есть ниже вектор и нет структур, добавленных к нему.

вектор <клиент> клиент;

Что я уже пробовал:

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

3 Ответов

Рейтинг:
1

Richard MacCutchan

Видеть <алгоритм> функции[^]


Maciej Los

5ed!

Richard MacCutchan

Спасибо, вы слишком великодушны.

Maciej Los

Кто, я? Никогда! :смеяться:

Рейтинг:
1

KarstenK

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

Если ваш вектор отсортирован я бы предложил быстрее двоичный поиск но я думаю, что вы можете рассмотреть это на более поздней стадии вашего проекта.


Maciej Los

5ed!

Vishal Bhatia0112

binary_search возвращает логическое значение в соответствии с его поиском, но нам нужен итератор для того же, что возвращается find() или find_if (), но опять же они используют линейный подход(плохо).

Я думаю написать свою собственную функцию binary_search, которая вернет итератор в найденную структуру.

Любые другие предложения приветствуются.

Рейтинг:
0

Rick York

Вот пример того, как использовать binary_search :

bool Compare( const Client& lhs, const Client& rhs )
{
    return ( lhs.client_id < rhs.client_id );
}

bool DoesClientExist( const Client &client, std::vector <Client> clientVec )
{
    return binary_search( clientVec.begin(), clientVec.end(), client, Compare );
}


Vishal Bhatia0112

binary_search возвращает логическое значение в соответствии с его поиском, но нам нужен итератор для того же, что возвращается find() или find_if (), но опять же они используют линейный подход(плохо).

Я думаю написать свою собственную функцию binary_search, которая вернет итератор в найденную структуру.

Любые другие предложения приветствуются.

Rick York

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

Rick York

Немного поискав, я нашел эту маленькую статью : http://wordaligned.org/articles/binary-search. Там есть несколько очень хороших советов.