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 ) );

但是这个插入函数 prototupe 不返回 std::pair 和 bool 来通知是否添加了值(检查是否存在并更新,如果是的话......如何解决这个问题以更新现有值?

4

2 回答 2

5

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

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

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

于 2012-04-26T21:11:36.317 回答
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;
}

This assumes you have operator!=() defined on the value type

于 2012-04-26T21:12:56.193 回答