gpt4 book ai didi

c++ - 自定义类指针的排序 vector

转载 作者:行者123 更新时间:2023-11-28 00:14:54 25 4
gpt4 key购买 nike

我有vector<FPGA*> current_generation_ ,我想按 FPGA 排序成员(member)fitness_使用 sort_members功能。适用代码如下:

bool sort_members (FPGA* fpga_first, FPGA* fpga_second) {
return (fpga_first->fitness() < fpga_second->fitness());
};

fpga.hpp

#include <vector>

class FPGA {
public:
explicit FPGA(int input_gates, int output_gates, int normal_gates);

const int fitness();

protected:
int fitness_;
};

fpga.cpp

FPGA::FPGA() {
this->fitness_ = 0;
}

const int FPGA::fitness() {
return this->fitness_;
}

实现:

std::sort(this->current_generation_.begin(), this->current_generation_.end(), sort_members);

错误:

/usr/include/c++/4.9/bits/stl_algo.h: In instantiation of ‘void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = std::__detail::_Node_iterator<std::pair<const int, FPGA*>, false, false>; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<bool (*)(FPGA*, FPGA*)>]’:
/usr/include/c++/4.9/bits/stl_algo.h:4717:78: required from ‘void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = std::__detail::_Node_iterator<std::pair<const int, FPGA*>, false, false>; _Compare = bool (*)(FPGA*, FPGA*)]’

/usr/include/c++/4.9/bits/stl_algo.h:1968:22: error: no match for ‘operator-’ (operand types are ‘std::__detail::_Node_iterator<std::pair<const int, FPGA*>, false, false>’ and ‘std::__detail::_Node_iterator<std::pair<const int, FPGA*>, false, false>’)
std::__lg(__last - __first) * 2,

总错误字符串的其余部分很大,但我相信大部分是编译器认为(错误地)是候选者。我对 C++ 不是很熟悉,如此严重和复杂的编译器错误让我感到困惑。

如果需要,我可以提供更多上下文。谢谢!

编辑:破折号。

编辑 编辑:我搞砸了,正试图对错误的成员进行排序。万岁。

最佳答案

我看到的唯一错误是 this>current_generation_.end()而不是 -> .

此外,您应该考虑将比较函数声明为接受两个 const FPGA*取而代之的是 FPGA* .这将迫使您声明 fitness()作为const int fitness() const但拥有它是有意义的const .

请注意,由于您使用的是 C++11,因此您可以直接使用 lambda:

std::sort(data.begin(), data.end(), [](const FPGA* f1, const FPGA* f2) { ... });

您还可以选择重载 operator<直接:

class FPGA {
...

bool operator<(const FPGA* other) const { return fitness_ < other->fitness_; }
}

std::sort(data.begin(), data.end());

如果使用其他标准来比较两个 FPGA 实例没有意义,这可能会很有用,因为您向对象本身添加了一些语义。

关于c++ - 自定义类指针的排序 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991553/

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