以下c ++代码返回什么?

时间:2013-01-20 14:26:21

标签: c++ types map iterator unordered-map

我有一段代码需要理解。但是我迷失了一点。 这是代码:

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返回什么?我有点迷茫。

这不是所有代码,都有初始化等等。但是我不把所有的代码放在这里。

谢谢,

3 个答案:

答案 0 :(得分:5)

它将返回TimeStampSet *。也就是说,unordered_map的第二部分(字符串,TimeStampSet *)“对”。

答案 1 :(得分:2)

取消引用容器的迭代器会为您提供一个对象,其类型为容器的value_type。对于map<K, T>(或unordered_map),value_typepair<K const, T>,以便您可以使用it->firstit->second来访问密钥,映射元素的映射值。

因此hostInfoIt->secondHostInfo *...->hieMapArrHIEMap *hieMapItHIEMap::iterator。因此hieMapIt->secondTimeStampSet *

答案 2 :(得分:1)

std::unordered_map<K,V>包含std::pair<const K,V>,因此解除引用此类地图元素的元素的迭代器会为您提供其中一个元素的句柄。 std::pair<const K,V>::secondV,在您的情况下是指向TimeStampSet的指针