Criar Funções Booleanas em C++

  1. Implementar a comparação de tamanho de string como função booleana
  2. Implementar a função booleana que retorna se o elemento com chave específica existir num mapa

Este artigo irá introduzir como criar funções booleanas em C++.

Implementar a comparação de tamanho de string como função booleana

Função booleana denota a função que retorna um valor do tipo bool. A estrutura da função booleana pode ser a mesma que a de qualquer outra função. No exemplo abaixo, implementamos uma função isLessString que compara dois tamanhos de string. A função retorna true se o comprimento da primeira string for inferior à segunda; caso contrário, retorna false.

Note-se que colocamos a expressão de comparação após a palavra-chave return para passar o valor do resultado de volta para a função que chama.

#include <iostream>
#include <algorithm>
#include <iterator>
#include <map>

using std::cout; using std::endl;
using std::string; using std::map;

bool isLessString(string &s1, string &s2)
{
    return s1.size() < s2.size();
}

int main() {
    string str1 = "This string shall be arbitrary";
    string str2 = "Let this string be compared compared";

    if(isLessString(str1, str2))
        cout << "str1 is shorter than str2";
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

str1 is shorter than str2

Implementar a função booleana que retorna se o elemento com chave específica existir num mapa

Este exemplo implementa a função booleana para encontrar se o elemento com uma chave específica existe num contentor std::map. Uma vez que o tópico principal é sobre a função de retorno do tipo bool, utilizaremos o método embutido find em std::map em vez de implementarmos a rotina de pesquisa por nós próprios.

O método find leva um argumento - key e devolve o iterador ao elemento correspondente. Se nenhum elemento for encontrado com a chave especificada, o end (após o fim) iterator é devolvido.

A nossa função keyExistsInMap utiliza argumentos map e string e chama o método find a partir do map dado. Se o valor de retorno da chamada não for igual a end iterator true é passado de volta para a função de chamada; caso contrário, retorna false.

#include <iostream>
#include <algorithm>
#include <iterator>
#include <map>

using std::cout; using std::endl;
using std::string; using std::map;

bool keyExistsInMap(map<string, string> &m, const string& key)
{
    if (m.find(key) != m.end()) {
        return true;
    } else {
        return false;
    }
}

int main() {
    map<string, string> veggy_map = {{"a", "Asparagus",},
                                     {"b", "Beetroot",},
                                     {"b", "Bedsetroot",},
                                     {"g", "Ginger",},
                                     {"m", "Melon",},
                                     {"p", "Pumpkin",},
                                     {"s", "Spinach",}};

    keyExistsInMap(veggy_map, "a") ?
        cout << "Key exists" << endl :
        cout << "Key does not exist\n" << endl;

    keyExistsInMap(veggy_map, "z") ?
    cout << "Key exists" << endl :
    cout << "Key does not exist\n" << endl;


    return EXIT_SUCCESS;
}

Resultado:

Key exists
Key does not exist

Artigo relacionado - C++ Function

  • Utilizar funções de Callback em C++