GNU/Linux >> Linux の 問題 >  >> Linux

std::map 挿入が成功したか失敗したかを知るにはどうすればよいですか?

実際、ヒント パラメーターを受け取る挿入メソッドは、挿入が成功したかどうかを返しません。挿入が実際に行われたかどうかを確認する 1 つの方法は、挿入前後のマップのサイズを確認することです。同じである場合、挿入は失敗しています (つまり、キーは既に存在していました)。醜いように聞こえるかもしれませんが、それが私が思いついた最も効率的な方法です。実際、通常のヒントなしの挿入と同じように、ヒント付きの挿入がペア (bool を含む) を返すべきではないという説得力のある理由はないと私は信じています。しかし、一度古い標準で指定されてしまうと、それを変更するのは非常に困難です。これは、C++ コミュニティがほとんど憤慨している重大な変更であるためです。

元の (間違った) 回答

このリンクを参照

... メンバー pair::first を持つペアを返します 新しく挿入された要素、またはマップ内に既に同じ値を持つ要素のいずれかを指す反復子に設定されます。 pair::second ペアの要素は、新しい要素が挿入された場合は true に設定され、同じ値を持つ要素が存在した場合は false に設定されます。

リンクには例も含まれています

例:

if(mp.insert(make_pair(key, value)).second == false)
{
   cout << "Insertion failed. Key was present"
}

typedef std::map<std::string, int> map;
map m;
std::pair<map::iterator,bool> result = m.insert(std::make_pair("hi", 42));

result.second には必要なものが含まれています


失敗または成功の意味によって異なります。

std::map::insert 新しい要素を挿入すると成功します。それ以外の場合は、既存の要素への反復子を返します。

std::map::insert 新しい要素を挿入するのに十分なメモリがない場合は失敗し、std::bad_alloc をスローします .


Linux
  1. Ddがまだ機能しているかどうかを知る方法は?

  2. Bashは、どのように呼び出されているかをどのように知っていますか?

  3. IPマルチキャストが有効になっているかどうかを知る方法は?

  1. 故障した Btrfs デバイスを交換する方法

  2. UTC 時刻を取得する方法

  3. std::mutex がロックされているかどうかをアサートする方法は?

  1. Linux – Dmesgで何をgrepするかを知る方法は?

  2. netcat と dd が機能しているかどうかを確認するにはどうすればよいですか?

  3. Linuxでプログラムがスタックしている場所を知る方法は?