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

C++ STLのmap::rend()関数とは?使い方とサンプルコードを徹底解説

この記事では、C++ STLにおける map::rend() 関数 の動作、構文、そして具体的な使用例について詳しく解説します。

C++ STLにおけるマップ(map)とは?

マップは連想コンテナの一種で、キー値とそれに対応する値(マップドバリュー)の組み合わせからなる要素を、特定の順序で格納できるコンテナです。mapコンテナ内のデータは、内部で常にキーに基づいて自動的にソートされており、各要素へは一意なキーを通じてアクセスします。

map::rend()とは?

map::rend() 関数は、C++ STLに標準で組み込まれている関数で、<map> ヘッダーファイル内で定義されています。「rend」は「reverse end(逆向きの終端)」を意味し、end() 関数の逆の役割を果たします。この関数は、mapコンテナの先頭要素の直前の位置を指すリバースイテレータを返します。つまり、逆順走査における「終端」を表すイテレータです。

構文

Map_name.rend();

パラメータ

この関数は、引数を一切受け取りません。

戻り値

この関数は、mapコンテナを逆順に走査した際の終端位置、すなわち先頭要素の直前を指すリバースイテレータを返します。この位置には実際の要素が存在しないため、イテレータを逆参照(デリファレンス)することはできません。

使用例1:rend()の単独呼び出し

入力

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap['c'] = 3;
newmap.rend();

出力

error

rend() が返すイテレータは有効な要素の外側を指しているため、そのまま逆参照して利用しようとするとエラーになります。あくまで逆順走査の終端判定として使うための関数です。

使用例2:rbegin()とrend()による逆順走査

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout << "\nTP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.rbegin(); i != TP_Map.rend(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

出力

TP Map is:
MAP_KEY    MAP_ELEMENT
4          70
3          50
2          30
1          10

コードの解説

このプログラムでは、rbegin() がmapコンテナの末尾(最大のキー「4」)を指し、そこから rend() が示す終端まで順にイテレータを進めています。その結果、要素がキーの降順(4 → 3 → 2 → 1)に出力されます。このように rbegin()rend() を組み合わせることで、mapを簡単に逆順に走査できます。

まとめ

map::rend() は、mapコンテナを逆順に走査する際の終端を表す重要な関数です。単独で呼び出しても意味はなく、必ず rbegin() とセットでループ処理などに使用します。戻り値のイテレータは有効な要素を指さないため、逆参照しない点に注意しましょう。

  1. C++ STLのiswblank()関数とは?構文・戻り値・サンプルコードを徹底解説

    C++のiswblank()関数は、指定されたワイド文字(wide character)が空白文字(ブランク)であるかどうかを判定するための関数です。C言語では「ctype.h」ヘッダーファイルに、C++標準テンプレートライブラリ(STL)では「cctype」ヘッダーファイルに定義されています。 iswblank()関数の構文 int iswblank(wint_t ch) 戻り値: 引数に渡された文字が空白文字であれば0以外の値を返し、空白文字でなければ0を返します。 パラメータ: ch ― 空白文字かどうかを判定する対象の文字です。 使用例 入力: string str = I Love

  2. C++ STLのセット(set)とマップ(map)とは?違いと基本的な使い方を解説

    セット(std::set)とは セット(Set)は抽象データ型の一種で、要素の値そのものが識別子として機能するため、すべての要素が一意である必要があります。一度セットに追加した要素の値を直接変更することはできませんが、該当する要素を削除してから、変更後の値を新たに挿入し直すことは可能です。 マップ(std::map)とは マップ(Map)は、要素を「キー」と「値」のペアとして格納する連想コンテナです。各要素はキー値(key)とマップ値(mapped value)を持ち、同一のキー値を持つ要素が複数存在することはありません。 以上の説明から、両者の違いは次のように整理できます。 セット: