c++ - 直接覆盖 map::compare 与 lambda 函数

标签 c++ c++11 map lambda

尝试使用 lambda 覆盖 map::compare 函数,似乎以下解决方案有效。

auto cmp = [](const int&a, const int& b) { return a < b; };
std::map<int, int, decltype(cmp)> myMap(cmp);

但是,我必须先定义cmp,然后再使用它。
我可以在不定义“cmp”的情况下执行此操作吗?

最佳答案

不,您不能在未评估的上下文中使用 lambda - 即示例中的模板参数。 所以你必须在其他地方定义它(使用auto),然后使用decltype...另一种方式,正如已经提到的那样使用“序数”仿函数

如果您的问题是关于“如何在定义映射时使用 lambda 表达式 *一次*”,您可以利用 lambda 到 std::的隐式转换:函数如下:

#include <iostream>
#include <functional>
#include <map>

int main()
{
    auto m = std::map<int, int, std::function<bool(const int&, const int&)>>{
        [](const int& a, const int& b)
        {
            return a < b;
        }
    };
    return 0;
}

您可以为该 map 类型引入一个别名,以减少以后的输入...

关于c++ - 直接覆盖 map::compare 与 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045208/

相关文章:

c++ - 如何在每 1 分钟后在 C++ 中执行特定代码

c++ - 在不使用 'pdftotext' 命令行工具的情况下查找 PDF 中的文本,而是使用其 API

c++ - 新的 std::map::erase() 签名 C++17

c++ - 如何在互斥锁中优先考虑特权线程?

c++ - C++ 中特定位置映射的迭代器

list - 处理 scala.collections.parallel 中令人惊讶的 ParList 缺失问题

STL - 在 C++ 中,当键是带字符串的结构时,如何在带有仿函数的映射上使用 find_if?

c++ - 错误 C2668 : 'boost::bind' : ambiguous call to overloaded function

c++ - B.Stroustrup 新书中的优化与多线程

Android 和 Google 融合表