C++ でブール関数を作成する

胡金庫 2023年10月12日
  1. 文字列サイズ比較をブール関数として実装する
  2. 特定のキーを持つ要素がマップ内に存在する場合に返すブール関数の実装
C++ でブール関数を作成する

この記事では、C++ でブール関数を作成する方法を紹介します。

文字列サイズ比較をブール関数として実装する

ブール関数は bool 型の値を返す関数を表します。ブール関数の構造は他の関数と同じです。以下の例では、2つの文字列の大きさを比較する関数 isLessString を実装します。この関数は、最初の文字列の長さが 2 番目の文字列よりも小さければ true を返し、そうでなければ false を返します。

結果の値を呼び出し元の関数に返すために、return キーワードの後に比較式を置くことに注意してください。

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

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

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;
}

出力:

str1 is shorter than str2

特定のキーを持つ要素がマップ内に存在する場合に返すブール関数の実装

この例では、特定のキーを持つ要素が std::map コンテナ内に存在するかどうかを調べるためのブール関数を実装しています。本題は関数の戻り値の型 bool についてなので、独自に検索ルーチンを実装する代わりに std::map の組み込みメソッド find を利用することにします。

find メソッドは引数 key を 1つ取り、対応する要素へのイテレータを返します。指定したキーを持つ要素が見つからなかった場合は、end(過去の終わり)のイテレータが返されます。

関数 keyExistsInMapmapstring を引数にとり、与えられた map から find メソッドを呼び出す。呼び出しの戻り値が end イテレータ true と一致しない場合は true を呼び出し元の関数に返し、一致しない場合は false を返します。

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

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

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;
}

出力:

Key exists
Key does not exist
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Function