我有一段代码需要理解。但是我迷失了一点。 这是代码:
typedef unordered_map <string, TimeStampSet *> HIEMap;
typedef set <TimeStamp> TimeStampSet;
struct HostInfo {
HostActivity *hostActivity;
HIEMap *hieMapArr;
};
typedef unordered_map <uint32_t, HostInfo *> HostInfoMap;
HIEMap::iterator hieMapIt;
void method(...){
for (hieMapIt = hostInfoIt -> second -> hieMapArr -> begin();
hieMapIt != hostInfoIt -> second -> hieMapArr -> end();
hieMapIt = nextMapIt)
{
if (hieMapIt -> second == NULL) {
//what does *hieMapIt -> second* returns?
}
}
}
hieMapIt -> second
返回什么?我有点迷茫。
这不是所有代码,都有初始化等等。但是我不把所有的代码放在这里。
谢谢,
答案 0 :(得分:5)
它将返回TimeStampSet *
。也就是说,unordered_map的第二部分(字符串,TimeStampSet *)“对”。
答案 1 :(得分:2)
取消引用容器的迭代器会为您提供一个对象,其类型为容器的value_type
。对于map<K, T>
(或unordered_map
),value_type
为pair<K const, T>
,以便您可以使用it->first
和it->second
来访问密钥,映射元素的映射值。
因此hostInfoIt->second
是HostInfo *
,...->hieMapArr
是HIEMap *
,hieMapIt
是HIEMap::iterator
。因此hieMapIt->second
是TimeStampSet *
。
答案 2 :(得分:1)
std::unordered_map<K,V>
包含std::pair<const K,V>
,因此解除引用此类地图元素的元素的迭代器会为您提供其中一个元素的句柄。 std::pair<const K,V>::second
是V
,在您的情况下是指向TimeStampSet
的指针