カテゴリー【C/C++】
【C++】クラスポインタ配列内で最小の値を持つメンバ変数を検索しそのインデックスを求める
POSTED BY
2021-07-12
2021-07-12

【C++】クラスポインタ配列内で特定の値を持つメンバ変数を検索しそのインデックスを求める
の続きで、オリジナルクラスの配列で特定の値を持つ要素を検索しインデックスを求めるまでは同じだが、さらに、最も小さい要素を持つクラスを検索しインデックスを求めるには、std::min_elementをラムダ式で実装しオリジナルの比較関数を記述することで実現する。
以下サンプル
C/C++ | std_find_if_distance_min.cpp | GitHub Source |
#include <iostream> #include <vector> #include <memory> #include <string> #include <algorithm> class Test { public: Test(std::string s, int n){ string = s; number = n; } std::string string; int number; }; int main(int argc, char **argv) { //Testクラスポインタ配列定義 std::vector<std::shared_ptr<Test>> tests = std::vector<std::shared_ptr<Test>>(); //Testクラス3つ作成&代入 tests.push_back(std::make_shared<Test>(std::string("てすと1"), 50)); tests.push_back(std::make_shared<Test>(std::string("てすと2"), 20)); tests.push_back(std::make_shared<Test>(std::string("てすと3"), 70)); //numberが70の最初の要素を検索する(イテレータを返却) auto itr = std::find_if(tests.begin(), tests.end(), [&](auto &c) { return c->number == 70; //てすと3クラスが返るはず }); int i; //見つかった場合 if(itr != tests.end()) { //その配列インデックスを取得 i = std::distance(tests.begin(), itr); std::cout << "number==70 class is " << (*itr)->string << ", and index=" << i << std::endl; } //numberが最も小さい要素を検索する(イテレータを返却) itr = std::min_element(tests.begin(), tests.end(), [&](auto &c1, auto &c2) { return c1->number <= c2->number; }); //見つかった場合 if(itr != tests.end()) { //その配列インデックスを取得 i = std::distance(tests.begin(), itr); std::cout << "min number class is " << (*itr)->string << ", number=" << (*itr)->number << ", and index=" << i << std::endl; } return 0; }
コンパイル、実行結果
g++ std_find_if_distance_min.cpp ./a.out number==70 class is てすと3, and index=2 min number class is てすと2, number=20, and index=1
ラムダ式比較関数に比較用クラスが2つ渡されるので、それぞれのnumber要素同士を比較し小さければ真を返し、結果返却値itrにはnumber最小のクラスイテレータが返る。
なお、最大を求めるにはstd::max_elementに変更して、比較関数を
return c1->number >= c2->number;
などと、大きいほうを返すよう変更すればよい。
年間4億本を製造・販売する飲料メーカー直営通販サイト【LIFEDRINKオンラインストア】

●強炭酸水「ZAO SODA」●
蔵王連峰山麓の磨かれた水を使用した、大人気の無糖炭酸水です。
国産のおいしい...【READ MORE】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【キーワード検索】
植物由来の天然成分の自然派ダニよけスプレー「ママのためのシュシュッと簡単ダニスプレー」
【格安!夜行バス・高速バス】オンライン予約
『東洋の真珠(マニラ)』が生んだ時計ブランド【Ibarra Watch】
ジーンズを中心としたカジュアルファッションサイト!【Jeans mate】
デリケート肌に潤いを!乾燥による赤ちゃんの肌トラブル対策【Dolci Bolle】
1秒でまついく。日本初の専用サプリ。バンビウィンク。
0円から使える本人認証サービス Value-Auth(バリューオース)
ビッグローブ光キャッシュバックキャンペーン実施中!
【CB最短2ヵ月現金振込!簡単申請完了!オプション不要!】SoftBank光キャッシュバックキャンペーンサイト
【スマホヘビーユーザーにおくるネックフィット枕】

【格安!夜行バス・高速バス】オンライン予約

『東洋の真珠(マニラ)』が生んだ時計ブランド【Ibarra Watch】

ジーンズを中心としたカジュアルファッションサイト!【Jeans mate】

デリケート肌に潤いを!乾燥による赤ちゃんの肌トラブル対策【Dolci Bolle】

1秒でまついく。日本初の専用サプリ。バンビウィンク。

0円から使える本人認証サービス Value-Auth(バリューオース)

ビッグローブ光キャッシュバックキャンペーン実施中!

【CB最短2ヵ月現金振込!簡単申請完了!オプション不要!】SoftBank光キャッシュバックキャンペーンサイト

【スマホヘビーユーザーにおくるネックフィット枕】

【最近の記事】【全部の記事】
最新版のApache2でCGIが実行できずソースやバイナリが表示される場合bitcoinjs-lib、bip32、bip39を使ってビットコインアドレスを生成する
Cannot read property makeRandom of undefinedと言われた場合
web3.jsとwindow.ethereumでコントラクト関数を引数つきでコールしプロパティを取得する
JavaScriptで外部URLのファイルをダウンロードしてデータを取得する
【MetaMask】window.ethereumのeth_callで任意のコントラクト関数を呼ぶ
window.ethereum.requestに渡すdataフィールドをABIエンコードで作成する
【Solidity】Remix IDEを使用してサーバー不要のコントラクト開発&デバッグ【Ethereum】
【Windows】Googleフォトからダウンロードした動画が音声のみで映像が再生されない場合
PostgreSQLをソースコードからインストールしてsystemdのサービスとして動かす
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化する5chブラウザJane Styleの板一覧にゲーム板等が表示されない場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows版Google Driveが使用中と言われアンインストールできない場合
Googleスプレッドシートを編集したら自動で更新日時を入れる
【Javascript】JSON配列内にある特定要素の取得法【Node.js】
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
Ubuntuで固定IPアドレスを使う設定をする
【Anaconda3】指定した仮想環境でJupyter Notebookを動かす
Google ColaboratoryのTensorFlowバージョンを変更する(1.X←→2.X)
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋