0

マルチマップを使用して値を保存しています。マルチマップに挿入するときに、値が成功か失敗かを確認したいだけです。

次のコードを使用しようとしています

if (MultiMap.insert(TypeDefMap::value_type(Id, ans)))
  return 1;
else
  return 0;

しかし、これはスカラー型が期待するエラーを出しています。

ここで何かばかげたことを見逃していると思います。int と bool に型キャストしようとしましたが、うまくいきませんでした。

助言がありますか?

4

4 に答える 4

2

ドキュメントによると(マルチマップinsert方式)

値を返すバージョンでは、これはマルチマップに新しく挿入された要素を指す反復子です。

そのイテレータ != end() が成功を意味するかどうか、そうでない場合は失敗を意味するかどうかを確認する必要があります。

于 2011-05-18T10:55:50.620 に答える
1

失敗する可能性があるのは、次の 2 つだけstd::mutlimap::insertです。

  • 割り当ては失敗しますが、std::bad_alloc例外がスローされます。
  • key のコンパレーターは例外をスローしますが、その例外は伝搬されます。

(さらに、初期化されていないインスタンス/不良ポインター/...で呼び出すなど、いくつかの未定義の動作がありますが、とにかくセグメンテーション違反が発生する可能性があります)。どちらも何も返さないため、成功したかどうかを確認しても意味がありません。

于 2011-05-18T11:03:57.990 に答える
0

使ってみてください

if(MultiMap.insert(TypeDefMap :: value_type(Id、ans))== MultiMap.end())
    失敗を返す
そうしないと
    成功を返す

map / set / multimap / multisetからの戻り値(イテレータの場合)、無効な場合はend()と等しくなります。

于 2011-05-18T10:58:47.987 に答える
0

multimap::insert は、新しく挿入された要素を指す反復子を返します。

于 2011-05-18T10:54:52.370 に答える