C ++ std :: sort share_ptr <objects>的向量

时间:2015-07-19 09:38:11

标签: c++ vector

如何对shared_ptrs C ++的矢量进行排序?我正在尝试将一个vector数据对象的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>’
.....

1 个答案:

答案 0 :(得分:4)

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();
                                  ^

P.S。:在提出这些问题时,您应该发布所有#include的完整代码。在您的情况下,<vector><algorithm><memory>

相关问题