map max effective insert

时间:2012-04-26 20:54:18

标签: c++ map insert

以下是一些有效的代码:

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-&gt; end();类似的东西:

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

但是这个插入函数prototupe不会返回std :: pair与bool通知添加或不添加的值(检查是否存在并更新如果是这样的......如何解决这个问题以便能够更新现有值?

2 个答案:

答案 0 :(得分:5)

a.insert(提示,t)的后置条件是:

  

a包含一个元素,其键与t的键相同。 a的大小增加1或0。

这应该是确定元素是否被插入的足够信息。

答案 1 :(得分:0)

如果密钥已存在,则第二个版本(与第一个版本一样)不会更新值。您可以检查它是否确实已更新/插入:

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!=()