如何修复我的 C++ 代码? (与运营商不匹配)

How can I fix my C++ code ? (no match for operators)

如何修复我的 C++ 代码? (与运营商不匹配) 我收到一个错误:“operators-”不匹配。可能是什么问题,我该如何解决? 有人可以帮我解决吗?

error: no match for 'operator-' (operand types are 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'} and 'std::set::iterator' {aka 'std::_Rb_tree_const_iterator'})|

#include <iostream>
#include <set>
using namespace std;

int main()
{
    int O;
    int N;
    int M;

    cin >> O >> N >> M;

    int tanarsorszama[O];
    int tantargysorszama[O];
    int nap [O];
    int ora [O];

    for(int i=0; i<O; i++)
    {
        cin >> tanarsorszama[i] >> tantargysorszama[i] >> nap[i] >> ora[i];
    }

    int dblyukas[N]={0};
    set<int>orai; 

    for(int i=0; i<N; i++)
    {
        for(int k=1; k<6; k++)
        {
           orai.clear();  

            for(int j=0; j<9; j++)
            {
                if(tanarsorszama[i]!=0 && ora!=0 && nap[k]!=0)
                {
                    orai.insert(ora[j]);   
                }
            }
            if (orai.size() > 1) 
            {
              dblyukas[i] += orai.end() - orai.begin() +1 - orai.size();  // There is the error
            }
         }
     }
return 0;
}

std::set 没有随机访问迭代器。这就是您收到错误的原因。

要访问集合的第一个和最后一个元素,请使用 orai.begin()std::prev(orai.end())。这些 return 迭代器,必须使用 operator* 取消引用。所以,纠正我认为你打算做的事情,会导致以下结果:

            if (orai.size() > 1) 
            {
              dblyukas[i] += *std::prev(orai.end()) - *orai.begin() +1 - orai.size();  // There is the error
            }