c ++地图的怪异行为

时间:2013-03-05 17:13:01

标签: c++ map g++

这是代码

next = friendchain.begin()->first;
while(true) {
    start = next;
    next = friendchain[next];

    if(next!=0) {
        friendchain.erase(start);
        groupcount++;
        size = friendchain.size();
        printf("size=%i\n", size);
        //size = 0
    }

    if (next==0) {
        size = friendchain.size();
        printf("size=%i\n", size);
        //size = 1!!!

        if (friendchain.empty())
        {
            break;
            //should go out of the loop here
        } else {
            next = friendchain.begin()->first;
            // next has value of 3   
        }
    }
}

我的朋友链地图的内容是:
1 - > 2和
2 - > 3
我不明白为什么其他部分会被执行 如果您需要更多代码,请告诉我 问候

1 个答案:

答案 0 :(得分:1)

我删除了一些不需要的if语句,而你没有正确处理擦除。

auto itr = friendchain.begin();
while (itr != friendchain.end()) {
    if (itr->first != 0) {
        friendchain.erase(itr++);
        groupcount++;
    } else {
        ++itr;
    }

    std::size_t size = friendchain.size();
    printf("size=%i\n", size);
}