【问题标题】:weird behaviour of c++ mapsc ++映射的奇怪行为
【发布时间】:2013-03-05 17:13:00
【问题描述】:

这是代码

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
我不明白为什么 else 部分被执行。
如果您需要更多代码,请告诉我。
问候

【问题讨论】:

  • 你的问题很糟糕。我没有投反对票,而且你的代码也很糟糕,使用迭代器遍历你的地图,那么你就不需要检查它是否是 emtpy
  • 请至少显示友链的类型,然后开始
  • 我是第一次使用地图,并且仍在学习引用 c++ 文档的语言,但在那里没有得到任何解决方案。 @PorkyBrain start 和 next 很长。

标签: c++ map g++


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 2015-03-25
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2020-03-26
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多