简体   繁体   English

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

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

Newbie in C++. C ++中的新手。 I would like to create a dynamic object array and use std::sort() to sort them. 我想创建一个动态对象数组,并使用std :: sort()对它们进行排序。 However, several errors appear and I could not figure out why. 但是,出现几个错误,我不知道为什么。 Thanks for any help. 谢谢你的帮助。 The errors appear like this: 错误显示如下:

 > community\\vc\\tools\\msvc\\14.10.25017\\include\\xutility(988): > error C2794: 'iterator_category': is not a member of any direct or > indirect base class of 'std::iterator_traits<_InIt>' > with > [ > _InIt=Problem > ] \\include\\algorithm(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 wrong. 是错的。 indexing into an array of an unknown size is will not produce an iterator (as required by std::sort . You probably meant 索引到未知大小的数组中将不会产生迭代器(如std::sort所要求。

sort(ProblemSet, ProblemSet + N);

You may also want to replace your manual dynamic array management: 您可能还需要替换手动动态阵列管理:

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

With a std::vector . 使用std::vector

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

Doing that would even simplify your function interfaces. 这样做甚至可以简化功能接口。 And to sort: 并排序:

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 std::iterator_traits 中的 iterator_category 与 iterator_category() 有什么区别 - What is a difference between iterator_category vs iterator_category() in std::iterator_traits 遇到错误:“struct std::iterator_traits”中没有名为“iterator_category”的类型<std::vector<int> &gt; - Encountring error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<std::vector<int> > “struct std::iterator_traits”中没有名为“iterator_category”的类型<int* const> '</int*> - No type named 'iterator_category' in 'struct std::iterator_traits<int* const>' 铛错误:c ++ / 4.8 / bits / stl_iterator_base_types.h:227:29:错误:&#39;std :: iterator_traits中没有名为&#39;iterator_category&#39;的类型 <unsigned long> “ - clang error: c++/4.8/bits/stl_iterator_base_types.h:227:29: error: no type named 'iterator_category' in 'std::iterator_traits<unsigned long>' std :: vector中没有名为iterator_category的类型 - No type named iterator_category in std::vector 专门化iterator_traits - specializing iterator_traits iterator_category和decltype - iterator_category and decltype 使用std :: iterator_traits &lt;&gt;时出现不清楚的编译时错误 - Unclear compile time error when using std::iterator_traits<> 如何使用 iterator_category 表示自定义迭代器 class 的标签? - How to use iterator_category to indicate the tag of a customized iterator class? 前向迭代器iterator_traits :: reference的要求 - Requirements for forward iterator iterator_traits::reference
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM