"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como encontrar elementos com eficiência em um vetor de estruturas usando std::find_if?

Como encontrar elementos com eficiência em um vetor de estruturas usando std::find_if?

Publicado em 01/11/2024
Navegar:485

How to Efficiently Find Elements in a Vector of Structs Using std::find_if?

Encontrando elementos em um vetor de estruturas usando std::find

Ao trabalhar com estruturas de dados complexas, como structs, pesquisar em um vetor desses elementos pode se tornar um desafio . Neste contexto, a função std::find fornece uma solução para identificar elementos específicos dentro de um vetor.

Considere uma definição de estrutura como esta:

struct monster 
{
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};

Agora, digamos que temos um vetor de monstros:

std::vector monsters;

Para procurar um elemento baseado em um campo específico dentro da estrutura, como o ID do monstro, precisamos utilizar std::find_if em vez de std::find. std::find_if usa uma função de predicado como argumento, o que nos permite definir os critérios de pesquisa.

Aqui está um exemplo usando a biblioteca boost:

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);

Ou, se boost não estiver disponível, você pode criar seu próprio objeto de função find_id como este:

struct find_id : std::unary_function {
    DWORD id;
    find_id(DWORD id) : id(id) {}
    bool operator()(monster const& m) const {
        return m.id == id;
    }
};

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
         find_id(currentMonster));

Ao usar std::find_if e a função de predicado apropriada, você pode pesquisar com eficiência um vetor de estruturas para encontrar elementos específicos com base em suas variáveis ​​de membro.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3