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

C++におけるmatch_results演算子「=」の使い方を徹底解説

本記事では、C++ STLにおける match_results の演算子「=」の動作、構文、そして具体的な使用例について詳しく解説します。

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

std::match_results は、正規表現(regex)によるマッチ操作の結果として得られた文字列シーケンスのコレクションを格納するための、コンテナに似た特殊なクラステンプレートです。このコンテナクラスでは、regexマッチ操作によって対象シーケンス内のマッチ結果が保持されます。

match_results演算子「=」とは

match_results の演算子「=」は代入演算子であり、ある match_results オブジェクトに値を割り当てるために使用されます。この演算子を使うことで、一方の match_results オブジェクトからもう一方へ要素をコピーまたはムーブすることができます。

構文

match_results1 = (match_results2);

パラメータ

データをコピー元となる別の match_results オブジェクトを指定します。

戻り値

この演算子は何も返しません(void)。

入力:string str = "Tutorials Point";
    regex R("(Tutorials)(.*)");
    smatch Mat_1, Mat_2;
    regex_match(str, Mat_1, R);
    Mat_2 = Mat_1;
出力:MAT 2 =
    Tutorials Point
    Tutorials
    Point

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Point";
    regex R("(Tutorials)(.*)");
    smatch Mat_1, Mat_2;
    regex_match(str, Mat_1, R);
    Mat_2 = Mat_1;
    cout<<"String matches: " << endl;
    for (smatch::iterator i = Mat_2.begin(); i!= Mat_2.end(); i++) {
        cout << *i << endl;
    }
}

出力

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

String matches:
Tutorials Point
Tutorials
Point

応用例:条件分岐による代入

次の例では、2つの異なる正規表現でマッチ結果を取得し、マッチ数が多い方の結果を演算子「=」を使って別のオブジェクトに代入しています。

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Point";
    regex R_1("(Tutorials)(.*)");
    regex R_2("(Po)(int)(.*)");
    smatch Mat_1, Mat_2;
    regex_match(str, Mat_1, R_1);
    regex_match(str, Mat_2, R_2);
    smatch Mat;
    if (Mat_1.size() > Mat_2.size()) {
        Mat = Mat_1;
    } else {
        Mat = Mat_2;
    }
    cout<<"string matches " << endl;
    for (smatch::iterator i = Mat.begin(); i!= Mat.end(); i++) {
        cout << *i << endl;
    }
}

出力

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

String matches:
Tutorials Point
Tutorials
Point

まとめ

match_results の演算子「=」を使えば、正規表現のマッチ結果を簡単に別のオブジェクトへコピーできます。マッチ結果の比較や条件に応じた処理の切り替えなど、実践的なプログラムでも活用できる便利な機能ですので、ぜひ覚えておきましょう。

  1. 【C++ STL】match_resultsのmax_size()関数とは?使い方とサンプルコードを解説

    C++ STLにおけるmatch_resultsクラスのmax_size()関数は、正規表現のマッチ結果を格納するコンテナが保持できる要素数の最大値(上限)を返します。この値は実装や環境によって異なり、理論上の最大サイズを示すものです。ポイント:この関数は引数(パラメータ)を受け取りません。構文match_results_object.max_size()戻り値として、コンテナが保持可能な最大要素数を整数型で返します。サンプルコード以下は、max_size()関数を使って、match_resultsオブジェクトが保持できる最大要素数を出力する例です。#include<iostream&g

  2. 【C++】unordered_multimap::operator=() の使い方とサンプルコード解説

    std::unordered_multimap::operator=() は、C++標準ライブラリに用意された代入演算子です。既存の要素をすべて置き換える形で新しい内容を unordered_multimap に代入し、必要に応じてコンテナのサイズも自動的に調整します。 概要 この演算子は「コピー代入」と呼ばれる動作を行い、引数として渡された別の unordered_multimap オブジェクトの全要素を現在のオブジェクトへ複製します。元々格納されていた要素は破棄され、新しい要素に置き換えられる点に注意してください。 以下は、<unordered_map> ヘッダーで宣言されてい