首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++ std::map比较函数导致运行时"bad_function_call“

c++ std::map比较函数导致运行时"bad_function_call“
EN

Stack Overflow用户
提问于 2022-06-19 05:43:34
回答 2查看 55关注 0票数 2

我正在声明我的std:map并在下面使用它:

代码语言:javascript
运行
复制
    map<int, int, function<bool (int, int)>> m;
    m.insert(make_pair(12,3));
    m.insert(make_pair(3,4));
    for(auto & p : m){
        cout << p.first << "," << p.second << endl;
    }

g++编译,没有错误。模板参数只需要类型,但不需要函数体,只需要编译。我在想这个空空如也的人会怎么做。在运行时:

代码语言:javascript
运行
复制
terminate called after throwing an instance of 'std::bad_function_call'
  what():  bad_function_call

我只在调用纯虚拟函数时看到了这个错误。但是我的代码是使用stl模板的,没有多态性。

那么,这是一个c++设计问题吗?编译不检查一个函数是否只有声明而没有运行函数体?另外,c++标准将如何处理这一问题?

感谢你的解释。

EN

Stack Overflow用户

发布于 2022-06-19 06:05:11

map<int, int, function<bool (int, int)>> m;

您声明std::map使用自己的比较器,其签名为bool(int, int),但没有提供可调用的函子。

您应该声明一个真正的可调用对象,并将其传递给构造函数,以便您的映射能够在需要时调用它。

代码语言:javascript
运行
复制
auto order_by_asc = [](int n1, int n2)->bool {return (n1 < n2); };
std::map<int, int, std::function<bool(int, int)>> m(order_by_asc);
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72674526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档