gpt4 book ai didi

c++ - 如何对 unique_ptr 的 vector 进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:27 27 4
gpt4 key购买 nike

我声明了一个 vector 如下:vector<unique_ptr<Worker>> Workers . Worker是具有私有(private)字段的基类 name它有两个派生类:BuilderDriver .

我添加到 Workers Builder 的 vector 对象和 Driver然后我想按 name 对 vector 进行排序使用 #include <algorithm>像这样:

sort(Workers.begin(), Workers.end(), cmp_by_name);

bool cmp_by_name(const Worker &a, const Worker &b)
{
return a.getName() < b.getName();
}

但是 VS 编译器说:

Error 1 error C2664: 'bool (const Worker &,const Worker &)' : cannot convert argument 2 from 'std::unique_ptr>' to 'const Worker &' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3071 1 App

我该如何修复这个错误?


感谢@NathanOliver、@Rabbid76 和 this question ,我编辑了我的 cmp_by_name变成这种形式:

struct cmp_by_name
{
inline bool operator()(const unique_ptr<Worker>& a, const unique_ptr<Worker>& b)
{
return a->getName() < b->getName();
}
};

我这样调用排序函数:

sort(Workers.begin(), Workers.end(), cmp_by_name());

最佳答案

std::sort 的比较函数uses 需要采用以下形式:

bool cmp(const Type1 &a, const Type2 &b);

这里是类型 Type1Type2必须使迭代器可以被取消引用,然后隐式转换为它们。

在你的情况下取消引用 Workers.begin()给你一个 unique_ptr<Worker>不是Worker .您将需要更改您的比较功能以采用 const unique_ptr<Worker>& .

在这种情况下,它最终看起来像:

bool cmp_by_name(const std::unique_ptr<Worker>& a, const std::unique_ptr<Worker>& b)
{
return a->getName() < b->getName();
}

关于c++ - 如何对 unique_ptr 的 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906144/

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