我不知道是什么让这段代码出错。这是一个简单的多重集。没有编译错误,但执行时机器上出现段错误。

g++ 版本:4.8.2

机器:Ubuntu 14.04

#include <cstdio>
#include <set>

using namespace std;

struct compare
{
    bool operator() (int lhs, int rhs) { return lhs < rhs; }
};
typedef multiset < int, compare >  mi;

mi sett;

int main(void)
{
    sett.insert(5);
    sett.insert(5);
    sett.erase(*sett.begin());
    sett.erase(*sett.rbegin());
    printf("Done\n");
}

最佳答案

您的第一个 erase 有效地清空了您的 multiset

来自 std::multiset::erase (强调我的)



因此,第二次尝试 erase 时,您尝试取消引用 std::multiset::end ,这是 sett.rbegin() 为空 multiset 返回的内容

关于c++ - 从多集 C++ 中删除时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30913658/

10-10 19:06