0

ここにいくつかの作業コードがあります:

std::pair<typename std::map< time_t, T >::iterator, bool> ret;    
ret = prt_map->insert ( std::pair< time_t, T >( seconds , value ) );
if (ret.second == false) // exists
{
 ... update exising value
}

私はそれを最大効率の挿入コードにアップグレードし、 --prt_map->end(); から開始する必要がある挿入のヒントを提供したいと考えています。何かのようなもの:

  prt_map->insert ( --prt_map->end(), std::pair< time_t, T >( seconds , value ) );

しかし、この挿入関数のプロトタイプは、値が追加されたかどうかを通知するブール値を持つ std::pair を返しません (存在するかどうかを確認し、そうであれば更新します...既存の値を更新できるようにするには、これを解決するにはどうすればよいですか?

4

2 に答える 2

5

a.insert(hint, t) の事後条件は次のとおりです。

a には、t と同じキーを持つ要素が含まれています。a のサイズは 1 または 0 ずつ増加します。

これは、要素が挿入されたかどうかを判断するのに十分な情報です。

于 2012-04-26T21:11:36.317 に答える
0

2 番目のバージョン (最初のバージョンと同様) は、キーが既に存在する場合、値を更新しません。実際に更新/挿入されたかどうかを確認できます。

std::map<time_t, T>::iterator ret = prt_map->insert(--prt_map->end(),
    std::make_pair(seconds, value));
if (*ret != value) {
   // the same key already exists, update value
   *ret = value;
}

operator!=()これは、値の型で定義したことを前提としています

于 2012-04-26T21:12:56.193 に答える