我正在使用Google的sparsehashmap,并试图找出插入或查找的值。以下工作,但显然它正在查找两次。如果没有双重查找,我该怎么做?
Element newElement = Element();
bool inserted = ((*map).insert(pair<const int64, Element>(key, newElement))).second;
Element element = (*(((*map).insert(pair<const int64, Element>(key, newElement))).first)).second;
if (inserted)
puts("INSERTED");
我无法检查Element的内容(它是一个结构),因为我想区分正在找到的默认元素和要插入的newElement。我无法弄清楚如何将((*map).insert(pair<const int64, Element>(key, newElement)))
分配给变量,因为它是包含sparse_hash_map
类私有类型的模板类型。
答案 0 :(得分:2)
试试这个:
typedef sparse_hash_map<...>::iterator sh_iterator; //you already have this, haven't you?
std::pair<sh_iterator, bool> res = map->insert(std::make_pair(key, newElement));
if (res.second)
puts("INSERTED");
如果由于某种原因你不喜欢std::make_pair
函数,你应该考虑对类型的typedef:
typedef pair<const int64, Element> map_pair;
无论如何,insert
的返回类型为pair<iterator, bool>
,而AFAIK iterator
是该类的公共typedef。
insert
...来获取插入的元素?您可能应该声明element
作为参考。在我建议的代码中:
Element &element = res.first->second;
当然,如果你使用的是C ++ 11,你可以这样做:
auto res = ...;