C++ でブール関数を作成する
胡金庫
2023年10月12日
この記事では、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
(過去の終わり)のイテレータが返されます。
関数 keyExistsInMap
は map
と string
を引数にとり、与えられた 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
著者: 胡金庫