以下是一些有效的代码:
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通知添加或不添加的值(检查是否存在并更新如果是这样的......如何解决这个问题以便能够更新现有值?
答案 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!=()