iterator_category':不是 'std::iterator_traits<_InIt>' 的任何基类的成员

iterator_category': is not a member of any base class of 'std::iterator_traits<_InIt>'

本文关键字:iterator 任何 基类 gt 成员 std category 不是 traits lt InIt      更新时间:2023-10-16

新手在C++。我想创建一个动态对象数组并使用 std::sort(( 对它们进行排序。但是,出现了几个错误,我不知道为什么。感谢您的任何帮助。错误如下所示:

> communityvctoolsmsvc14.10.25017includexutility(988):
> error C2794: 'iterator_category': is not a member of any direct or
> indirect base class of 'std::iterator_traits<_InIt>'
>           with
>           [
>               _InIt=Problem
>           ]  includealgorithm(2915):
> note: see reference to function template instantiation 'void
> std::_Debug_range<_RanIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)'
> being compiled
>           with
>           [
>               _RanIt=Problem,
>               _InIt=Problem
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Problem{
public:
    string name;
    int t;
    int d;
    Problem() {}
    Problem(string name,int t,int d):name(name),t(t),d(d) {}
    ~Problem() {}
    bool operator<(const Problem &right) const {
        if (t == right.t) return d < right.d;
        else return t < right.t;
    }
};
void FindOrder(int H, int N, int t0, Problem ProblemSet[]);
bool compare(const Problem &left,const Problem &right) {
    if (left.t == right.t) return left.d < right.d;
    else return left.t < right.t;
}
int main()
{
    int H, N, t0;
    cin >> H;
    while (H >= 0) {
        cin >> N >> t0;
        //Problem ProblemSet = (Problem)malloc(N * sizeof(struct ProblemNode));
        Problem* ProblemSet = new Problem[N];
        for (int i = 0;i<N;i++)
            cin >> ProblemSet[i].name >> ProblemSet[i].t >> ProblemSet[i].d;
        FindOrder(H, N, t0, ProblemSet);
        delete[] ProblemSet;
        cin >> H;
    }
    return 0;
}
void FindOrder(int H, int N, int t0, Problem ProblemSet[]) {
    int total = t0;
    sort(ProblemSet[0], ProblemSet[N-1]);
    for (int i = 0;i < N;i++) {
        cout << ProblemSet[i].name << ProblemSet[i].t << ProblemSet[i].d << endl;
    }
}
void FindOrder(int H, int N, int t0, Problem ProblemSet[]) {
    int total = t0;
    sort(ProblemSet[0], ProblemSet[N-1]);   //Wrong
    for (int i = 0;i < N;i++) {
        cout << ProblemSet[i].name << ProblemSet[i].t << ProblemSet[i].d << endl;
    }
}

sort(ProblemSet[0], ProblemSet[N-1]);是错误的。 索引到未知大小的数组 IS 不会生成迭代器(如 std::sort 的要求。你可能的意思是

sort(ProblemSet, ProblemSet + N);

您可能还希望替换手动动态阵列管理:

Problem* ProblemSet = new Problem[N];
....
delete[] ProblemSet;

带着std::vector.

std::vector<Problem> ProblemSet(N);

这样做甚至可以简化您的功能接口。并排序:

void FindOrder(int H, int t0, std::vector<Problem>& ProblemSet) {
    int total = t0;
    sort(ProblemSet.begin(), ProblemSet.end());
    for (auto& p : ProblemSet) {
        cout << p.name << p.t << p.d << endl;
    }
}