gpt4 book ai didi

c++ - 对集合的键类型使用比较函数会导致运行时错误

转载 作者:行者123 更新时间:2023-11-30 03:52:45 24 4
gpt4 key购买 nike

我读过 this问题,它对我没有帮助。

我的问题是:为什么在为 set 的键类型使用比较函数时出现运行时错误,如下所示?

multiset<Phone, decltype(comp)*> phones { Phone(911), Phone(112) };
//^^^^^^^^^^^^^^^

在 VC2013 中,它为我提供了上述代码:

Unhandled exception at 0x73DECB49 in debugit.exe: 0xC0000005: Access violation executing location 0x00000000.

这是一个产生错误的小例子:

#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;

struct Phone {
Phone(long long const &num) : number{num} {}
long long number;
};

// compare function:
bool comp(Phone const &n1, Phone const &n2) { return n1.number < n2.number; }

int main()
{ // The below line produces the runtime error.
multiset<Phone, decltype(comp)*> phones { Phone(911), Phone(112) };
}

我看不出我做错了什么。我用 VC2013 和 g++ (GCC) 4.9.1 编译的结果相同。

最佳答案

decltype(comp)* 只是指向带有签名 bool(Phone const&, Phone const&) 的函数的指针。它获取初始化为 nullptr 的值。 std::multisetstd::initializer_list 构造函数使用它作为 Compare 对象的默认参数。由于您已使用空函数指针作为比较器初始化了 std::multiset,因此调用它可能会导致段错误。

要解决此问题,请像这样提供 Compare 对象的有效实例:

multiset<Phone, decltype(comp)*> phones {{ Phone(911), Phone(112)}, &comp};

关于c++ - 对集合的键类型使用比较函数会导致运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com