C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++ STL】set::find()関数の使い方を徹底解説!構文・戻り値・実用例

本記事では、C++ STLのset::find()関数について、その構文、動作、そして戻り値をわかりやすく解説します。

C++ STLにおけるsetとは?

C++ STLのsetは、重複のない一意な要素を自動的にソートされた順序で格納する連想コンテナです。set内では要素の値そのものが識別子として機能するため、すべての要素が一意である必要があります。一度setに追加した値は後から変更できませんが、要素の追加や削除はいつでも可能です。また、setは内部的に二分探索木(赤黒木)として実装されており、高速な検索処理を実現しています。

set::find()とは

find()関数は、<set>ヘッダに定義されたC++ STLの組み込み関数で、setコンテナ内から特定の要素や値を検索するために使用します。検索対象の要素が見つかった場合、その要素の位置を指すイテレータを返します。もし要素がset内に存在しない場合は、最後の要素の直後を指すイテレータ(end()相当)を返します。

構文

Set1.find(const type_t& element);

パラメータ

この関数は1つの引数を受け取ります。elementは検索したい対象の要素です。

戻り値

検索対象の要素を指すイテレータを返します。要素が見つからなかった場合は、末尾を示すend()イテレータを返します。

使用例

Input: set<int> myset = {10, 20, 40, 80, 90};
myset.find(40);
Output: 要素が見つかりました

サンプルコード①:要素の検索とそこからの走査

#include <bits/stdc++.h>
using namespace std;
int main(){
    set<int> mySet;
    mySet.insert(10);
    mySet.insert(20);
    mySet.insert(90);
    mySet.insert(80);
    mySet.insert(40);
    auto temp = mySet.find(40);
    cout<<"Elements after 40 are: ";
    for (auto i = temp; i != mySet.end(); i++)
        cout << *i << " ";
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

Elements after 40 are: 40 80 90

この例では、find(40)によって要素40の位置を取得し、そこからend()までループ処理することで、40以降の要素を出力しています。

サンプルコード②:find()とerase()の組み合わせ

#include <iostream>
#include <set>
int main (){
    std::set<int> mySet;
    std::set<int>::iterator i;
    for(int i=1; i<=4; i++)
        mySet.insert(i*2);
    i = mySet.find(6);
    mySet.erase(i);
    mySet.erase(mySet.find(4));
    std::cout<<"elements are : ";
    for (i = mySet.begin(); i != mySet.end(); ++i)
        std::cout << ' ' << *i;
    std::cout << '\n';
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

Elements are : 2 8

この例では、まず2・4・6・8の4つの要素を持つsetを作成します。find(6)で取得したイテレータをerase()に渡して要素6を削除し、さらにerase(mySet.find(4))で要素4も削除しています。その結果、残った要素「2」と「8」のみが出力されます。

  1. C++ STLのnegate関数で値の符号を反転する方法

    C++のSTL(標準テンプレートライブラリ)には、値の符号を簡単に反転できるnegate関数が用意されています。negateは「否定する」という意味を持つ関数オブジェクトで、正の値を負の値へ、負の値を正の値へと変換します。この記事では、std::transformと組み合わせてnegateを使う方法を解説します。関数プロトタイプnegateは通常、transformアルゴリズムと一緒に使われます。基本的な構文は以下の通りです。function transform(a_begin, a_end, a1_begin, negate()):    a_begin = 配列の先頭(

  2. C++ STLのatan2()関数の使い方を徹底解説!構文・戻り値・サンプルコード付き

    atan2()関数は、座標yとxから逆正接(アークタンジェント)を求めるための関数です。ここでいうyとxは、それぞれy座標とx座標の値を指します。atan2()はC++のSTL(標準テンプレートライブラリ)に組み込まれている関数で、<cmath>ヘッダをインクルードすることで利用できます。通常のatan()関数と異なり、atan2()はxの符号も考慮して正しい象限の角度を返すため、実務でも広く使われています。atan2()関数の構文atan2(dataType var1, dataType var2)構文を見ると分かるように、atan2()関数はfloat型、double型、lon