【发布时间】:2017-02-20 08:43:17
【问题描述】:
我有一个函数在 std 无序映射容器上调用 emplace() 方法,我需要返回 emplace() 调用给出的确切返回值。我知道它返回一个迭代器的std::pair(新旧取决于成功操作)和一个代表成功的布尔值。早些时候,我只返回 bool 部分,如下所示:
auto result = map.emplace(std::make_pair(id, someObj));
return result.second;
我知道返回类型是bool。但是现在我需要返回原始的result 变量,但我不知道它的类型,那么我应该在其类中的函数原型中放入什么?
我尝试在迭代器上使用typeid 方法,但它给出了:
St4pairINSt8__detail14_Node_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ELb0ELb1EEEbE
作为输出。
【问题讨论】:
-
您应该查阅一些文档。该标准是唯一确定的来源,但一个很好的近似值是:en.cppreference.com/w/cpp/container/unordered_map
-
@GManNickG 我试图在那里找到答案但失败了,那里只写了
Key或Iterator术语,我猜这不是确切的类型。 -
直接从emplace返回,即返回
std::pair<iterator,bool>。该接口是标准的,并在您的包装器中明确说明。我会问为什么需要一个标准函数的包装器? -
std::pair<std::unordered_map<K,V>::iterator, bool>其中K和V是您的地图模板化的实际类型。如果K和V是从属名称,您需要在std::unordered_map前面加上typename
标签: c++ c++11 unordered-map