C++ std::sort a vector of share_ptr<objects>

C++ std::sort a vector of share_ptr<objects>

本文关键字:ptr lt objects gt share sort std vector of C++      更新时间:2023-10-16

我如何排序一个矢量的shared_ptrs c++ ?我试图排序一个矢量share_ptrs结构数据对象。比较函数也被定义了。

struct data{
  int number;
};
bool comparator(const std::shared_ptr<data> &a, const std::shared_ptr<data> &b) {
    return a->number < b->number();
}
int main() {
  std::vector<std::shared_ptr<data>> v;
  std::sort(v.begin(), v.end(), comparator);
}

但是我得到了编译错误:

In file included from /usr/include/c++/4.8/algorithm:62:0,
                 from test.cpp:10:
/usr/include/c++/4.8/bits/stl_algo.h: In instantiation of ‘void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::shared_ptr<data>*, std::vector<std::shared_ptr<data> > >; _Compare = bool (*)(const A&, const A&)]’:
/usr/include/c++/4.8/bits/stl_algo.h:2226:70:   required from ‘void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::shared_ptr<data>*, std::vector<std::shared_ptr<data> > >; _Compare = bool (*)(const A&, const A&)]’
/usr/include/c++/4.8/bits/stl_algo.h:5491:55:   required from ‘void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<std::shared_ptr<data>*, std::vector<std::shared_ptr<data> > >; _Compare = bool (*)(const A&, const A&)]’
test.cpp:110:45:   required from here
/usr/include/c++/4.8/bits/stl_algo.h:2159:29: error: invalid initialization of reference of type ‘const A&’ from expression of type ‘std::shared_ptr<data>’
.....
return a->number < b->number();
必须:

return a->number < b->number;

然而,我想知道这是否是你的真实代码,你正在使用哪个编译器。您应该得到更清晰的错误消息,例如:

Visual c++ 2013:

error C2064: term does not evaluate to a function taking 0 arguments

GCC v4.8.3:

error: expression cannot be used as a function
     return a->number < b->number();
                                  ^

注::当你问这样的问题时,你应该把你所有的#include的完整代码贴出来。在您的情况下,<vector>, <algorithm><memory>