C++ 算法错误:参数无法从对转换1

C++ 算法错误:参数无法从对转换1,c++,std-pair,C++,Std Pair,在本作业中,我正在制作一个应用程序,其中用户输入一个电话号码,无论它是否为字母 我试过使用const-on-maps或vector来查看它是否解决了问题,但我认为它只是产生了更多的错误 下面是我认为会导致一些问题的代码 std::vector<int> mappednums; for (char& achar : word) { auto itr = std::find_if(lookupmap.begin(), lookupmap.end(), [&

在本作业中,我正在制作一个应用程序,其中用户输入一个电话号码,无论它是否为字母

我试过使用const-on-maps或vector来查看它是否解决了问题,但我认为它只是产生了更多的错误

下面是我认为会导致一些问题的代码

std::vector<int> mappednums;
    for (char& achar : word) {
        auto itr = std::find_if(lookupmap.begin(), lookupmap.end(), [&](std::pair<int, std::vector<char>>& aPair)->bool
            {

                auto itr = std::find_if(aPair.second.begin(), aPair.second.end(), [&](char& ch) {
                    return ch == achar;
                    });

                if (itr != aPair.second.end()) {
                    return true;
                }
                });
        if (itr != lookupmap.end()) {
            mappednums.push_back(itr->first);
        }
我希望它能找到一对,但它给了我一个错误,说它不能从上面的代码转换参数1。以下是错误:

'bool main::<lambda_06927067034dcc4076cc2514a7e290fe>::operator ()(std::pair<int,std::vector<char,std::allocator<char>>> &) const': cannot convert argument 1 from 'std::pair<const _Kty,_Ty>' to 'std::pair<int,std::vector<char,std::allocator<char>>> &'

您尚未为lambda正确声明参数。应该是

[&](std::pair<const int, std::vector<char>>& aPair)
其中,“LookupMapType”是lookupmap的类型

如果您的编译器支持C++14或更高版本,并且您启用了它,那么如果需要,您可以将其简化为

[&](auto &aPair)
简短答复: 在第一个lambda参数的int之前添加常量:

[&](std::pair<const int, std::vector<char>>& aPair)->bool
长答覆:

根据图::迭代器是一个迭代器到一个图::value_类型,而图::value_类型是pair是您的case是pair


问题是您试图将pair&引用绑定到pair类型的值。如果你能做到这一点,你将能够变异地图中的键,完全破坏地图的内部结构。因此,不允许对它们进行变异,它成对表示为const。

stringmap和lookupmap是什么类型的?我们必须了解更多信息:所有代码;这是在函数调用中间截断的。Stutmap是在STD::map Strimmap下面的,查找是STD::MAP LoopUpmap。如果你有问题的更多细节,请把它们编辑进去,不要评论。在VisualStudio中,错误窗口只包含错误的摘要。完整的错误消息在输出窗口中。
[&](std::pair<const int, std::vector<char>>& aPair)->bool