Unowned_Map::Find() を理解する
unowned_map::find() 関数は、「unowned_map」内の指定されたキーに関連付けられた要素を見つけるように設計されています。その宣言は、オブジェクトが定数修飾されているかどうかに基づいて異なり、その使用に柔軟性が提供されます。
イテレータの検索 ( 定数 キーの種類 & k ) ;これは、「unowned_map」が定数修飾されていない場合に使用されます。このコードは、見つかった要素を指す反復子を返します。
const_iterator 検索 ( 定数 キーの種類 & k ) 定数 ;
このバージョンは、「unowned_map」が定数修飾されている場合に適用されます。これは、非定数バージョンと同様の動作を持つ定数反復子を返します。
パラメーター:
単一のパラメータ「k」を取ります。これは、「unowned_map」内で検索されるキーです。
戻り値:
戻り値は、「unowned_map」オブジェクトの修飾によって異なります。
オブジェクトが常に修飾されていない場合、メソッドは非定数反復子を返します。
オブジェクトが定数修飾されている場合、メソッドは定数反復子を返します。
時間計算量:
std::unowned_map::find() の時間計算量は、その効率を理解するために非常に重要です。
平均的なケースでは、時間計算量は一定 (O(1)) であるため、一般的な使用例では非常に効率的になります。
最悪のシナリオでは、時間計算量は線形 (O(n)) になります。ただし、このシナリオは実際にはまれです。
例 1:
unowned_map::find() の使用法と利点を説明するための実践的な例を見てみましょう。この例では、文字をキーとして、対応する整数を値として使用して「unowned_map」が作成されます。 find() 関数は、「p」のキーにリンクされている要素を見つけます。 「ittr」イテレータは見つかった要素にリンクされ、そのデータがコンソールに出力されます。次のコードを参照してください。
#include#include <順序付けされていないマップ>
名前空間 std を使用する ;
整数 主要 ( 空所 ) {
順序なしマップ < チャー 、 整数 > アンアンプ = {
{ 'で' 、 9 } 、
{ 「あ」 、 6 } 、
{ 「ぷ」 、 8 } 、
{ 「ん」 、 3 } 、
{ 「さん」 、 4 } } ;
自動 それは = うんうん。 探す ( 「ぷ」 ) ;
コート << 「イテレータ」 ' << ittr->first << ' ' が指す = ' << それは -> 2番 << 終わり ;
戻る 0 ; }
コードを明確に理解しやすくするために、コードを分解してみましょう。
#include#include <順序付けされていないマップ>
必要なヘッダー ファイルが含まれています。入出力操作用の
「std」名前空間によりコードが簡素化されます。これにより、「std::」というプレフィックスを付けずに、標準 C++ ライブラリの要素を使用できるようになります。
順序なしマップ < チャー 、 整数 > アンアンプ = { { 'で' 、 9 } 、 { 「あ」 、 6 } 、 { 「ぷ」 、 8 } 、 { 「ん」 、 3 } 、 { 「さん」 、 4 } } ;「um」という名前の「unowned_map」が、文字 (「w」、「a」、「p」、「m」、「s」) をキーとして、対応する整数 (9、6、8、3、4) を使用して作成されます。 ) を値として使用します。
自動 それは = うんうん。 探す ( 「ぷ」 ) ;find()関数は、「unowned_map」つまり「unomp」内のキーが「p」の要素を検索するために使用されます。 「ittr」イテレータは、識別された要素を指します。
コート << 「イテレーター」 ' << ittr->first << ' ' が指す = ' << それは -> 2番 << 終わり ;イテレータが指すコンテンツがコンソールに出力されます。この場合、キー (「p」) と関連する値 (8) が出力されます。
戻る 0 ;プログラムは終了し、実行が成功したことを示す 0 を返します。
参考までに、コードの出力を以下に示します。
このコードは、unowned_map::find() を利用して、「unowned_map」内の要素を効率的に検索してアクセスする簡単な例です。イテレータは、見つかった要素のキーと関連する値の両方にアクセスする便利な方法を提供します。
例 2:
ここに、unowned_map::find() 関数の別の簡単な例を示します。このコードは、整数キーに関連付けられたブール値を格納するための「unowned_map」の使用法を示し、次に find() 関数を利用して特定のキーの存在を確認します。次のコードを見て、それがどのように機能するかを理解しましょう。
#include名前空間 std を使用する ;
整数 主要 ( ) {
順序なしマップ < 整数 、 ブール > アンアンプ ;
アンアンプ [ 2 】 = 真実 ;
アンアンプ [ 67 】 = 間違い ;
アンアンプ [ 4つ。 】 = 真実 ;
アンアンプ [ 98 】 = 間違い ;
もし ( うんうん。 探す ( 67 ) == うんうん。 終わり ( ) )
コート << 「要素が見つかりません」 << 終わり ;
それ以外
コート << 「要素が見つかりました」 << 終わり ;
もし ( うんうん。 探す ( 42 ) == うんうん。 終わり ( ) )
コート << 「要素が見つかりません」 << 終わり ;
それ以外
コート << 「要素が見つかりました」 << 終わり ;
戻る 0 ;
}
コードの詳細な説明は次のとおりです。
#includeこの行には、競技プログラミングでよく使用される最も標準的な C++ ライブラリをカバーするヘッダー ファイルが含まれています。ただし、通常の C++ 開発では、特定のヘッダーを含めることをお勧めします。
順序なしマップ < 整数 、 ブール > アンアンプ ;「unomp」という名前の「unowned_map」が整数キーとブール値を使用して作成されます。
アンアンプ [ 2 】 = 真実 ;アンアンプ [ 67 】 = 間違い ;
アンアンプ [ 4つ。 】 = 真実 ;
アンアンプ [ 98 】 = 間違い ;
キーと値のペアは「unowned_map」に挿入されます。各キー (整数) はブール値に関連付けられます。
もし ( うんうん。 探す ( 67 ) == うんうん。 終わり ( ) )コート << 「要素が見つかりません」 << 終わり ;
それ以外
コート << 「要素が見つかりました」 << 終わり ;
find() 関数は、if-else 条件内で使用され、「unowned_map」内の特定のキー (67 および 42) を検索します。キーが見つかった場合は、「要素が見つかりました」と表示されます。それ以外の場合は、「要素が見つかりません」と表示されます。次の出力を参照してください。
このコードは、マップ内の特定のキーの有無を判断するための「unowned_map」と find() 関数の基本的な使用法を示しています。
例 3:
実行時に入力を提供することによって値を見つけることを示す別の例を見てみましょう。この単純なプログラムは、「unordered_map」を使用して、名前 (キーとして) と関連する数値 (この場合、いくつかの属性を表します) を保存します。次に、ユーザーに名前を入力し、find() 関数を使用してマップ内でその名前を検索し、名前が見つかった場合は関連する値を出力するように求めます。参考までにコードを以下に示します。
#include#include <文字列>
#include <順序付けされていないマップ>
名前空間 std を使用する ;
整数 主要 ( ) {
標準 :: 順序なしマップ < 標準 :: 弦 、 ダブル > アンアンプ = {
{ 「ヘリー」 、 23 } 、
{ 「その他」 、 7.4 } 、
{ 「カルスム」 、 1.2 } } ;
文字列誰 ;
コート << '誰を探しているの? ' ;
ゲットライン ( 食べる 、 誰が ) ;
順序なしマップ < 弦 、 ダブル >:: const_iterator 見つける = うんうん。 探す ( 誰が ) ;
もし ( 見つける == うんうん。 終わり ( ) )
コート << '見つかりません' ;
それ以外
コート << 終わり << 見つける -> 初め << ' は ' << 見つける -> 2番 << 終わり ;
戻る 0 ;
}
理解のためにコードの内訳を以下に示します。
順序なしマップ < 弦 、 ダブル > アンアンプ = { } ;「unomp」という名前の「unowned_map」が文字列キー (名前) と double 値を使用して作成されます。
文字列誰 ;ユーザーは画面上で名前を入力するように求められ、入力内容は「who」文字列変数に保存されます。
順序なしマップ < 弦 、 ダブル >:: const_iterator 見つける = うんうん。 探す ( 誰が ) ;find() 関数は、「unowned_map」内で入力された名前を検索するために使用されます。結果は「fnd」イテレータに格納されます。
もし ( 見つける == うんうん。 終わり ( ) )コート << '見つかりません' ;
それ以外
コート << 終わり << 見つける -> 初め << ' は ' << 見つける -> 2番 << 終わり ;
「fnd」イテレータが「unowned_map」の終わり (end()) に到達した場合、名前が見つからなかったことを意味し、「not found」が出力されます。それ以外の場合は、名前とそれに関連付けられた値が出力されます。コードの出力は次のとおりです。
このコードは基本的に、「unowned_map」を使用した単純な名前検索ツールとして機能します。ユーザー入力を受け取り、マップ内で名前を検索し、名前が見つかった場合は関連する値を提供します。
結論
C++ の unowned_map::find() 関数は、「unowned_map」コンテナー内の要素を効率的に見つけるための強力なメカニズムを提供します。平均時間の複雑さが一定であるため、キーと値のペアに迅速にアクセスする必要があるシナリオでの検索操作に適しています。提供された例では実際の使用法を紹介し、そのシンプルさと有効性を強調しています。結論として、unowned_map::find() 関数をマスターすると、C++ プログラマーが「unowned_map」コンテナーの可能性を最大限に活用する能力が向上し、最適化された高パフォーマンスのアプリケーションの作成に貢献します。