gpt4 book ai didi

C++ 在 unique_ptr 的映射上迭代 std::accumulate():没有已知的转换

转载 作者:行者123 更新时间:2023-12-01 14:15:52 25 4
gpt4 key购买 nike

这可能是星期五下午失明的情况...为什么 map 上的累积不起作用。它给我一个编译错误

main.cpp:35:80: note:   no known conversion for argument 2 from ‘std::pair, std::unique_ptr >’ to ‘const std::pair, std::unique_ptr >&’

这个 Actor 有什么问题?

#include <vector>
#include <map>
#include <memory>
#include <numeric>
#include <iostream>

using namespace std;

struct Foo
{
long bar() const {return 1;}
};


int main()
{

std::vector<std::unique_ptr<Foo>> v;

auto baz = [](long x, const std::unique_ptr<Foo>& p){return x + p->bar();};

std::accumulate(v.begin(), v.end(), 0L, baz);



std::map<std::string, std::unique_ptr<Foo>> m;

auto bam = [](long x, const std::pair<std::string, std::unique_ptr<Foo>>& p) {
return x + p.second->bar();
};

std::accumulate(m.begin(), m.end(), 0L, bam);


return 0;
}

最佳答案

value_type std::map std::pair<const Key, T> ;请注意, key 限定为 const .所以对于 std::map<std::string, std::unique_ptr<Foo>> value_typestd::pair<const std::string, std::unique_ptr<Foo>> , 但不是 std::pair<std::string, std::unique_ptr<Foo>> .因为std::unique_ptr , 临时 std::pair<const std::string, std::unique_ptr<Foo>>不能从 std::pair<std::string, std::unique_ptr<Foo>> 复制构造(并绑定(bind)到参数 p,引用类型为 const)。

您可以更改 lambda 的参数类型以匹配 value_type正好,那么参数就可以直接绑定(bind)了。

auto bam = [](long x, const std::pair<const std::string, std::unique_ptr<Foo>>& p) {
// ^^^^^
return x + p.second->bar();
};

您还可以使用 member types of std::map 喜欢value_typeconst_reference .

auto bam = [](long x, const std::map<std::string, std::unique_ptr<Foo>>::value_type& p) {
return x + p.second->bar();
};

auto bam = [](long x, std::map<std::string, std::unique_ptr<Foo>>::const_reference p) {
return x + p.second->bar();
};

关于C++ 在 unique_ptr 的映射上迭代 std::accumulate():没有已知的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62341602/

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