函数对象无法识别它获得的参数(std::set<int>)

function object doesn't recognize the param(std::set<int>) that it gets

本文关键字:std set gt lt int 参数 对象 识别 函数      更新时间:2023-10-16

我正在尝试编写一个使用函数对象的模板函数。函数对象获取的参数是 std::set(类型 int )。出于某种原因,当我尝试将集合与:for(auto curr: set) 一起扔时,它甚至不会进入 for 循环,就像它不识别它是一个 stl 集合一样!

主要:

int main()
{
    Functor object_x;
    SetInt set_1={1,2,6,4,3};
    SetInt set_output;
    set_output=mtmAlgorithem_2(set_output ,set_1,object_x);
    return 0;
}

这是模板:

template < typename SetToReturn,typename Generic, typename Functor >
SetToReturn mtmAlgorithem_2(SetToReturn a,Generic input, Functor object){
//All elements after element X including X.
    SetToReturn after_x;
    //All elements before element X not-including X.
    SetToReturn before_x;
    //Output set
    SetToReturn output;
    //copy elements from input to after_x:
    for(auto element: input){
        after_x.insert(element);
    }
    for(auto element: input){

// > ---------THIS IS WERE I CALL THE FUNCTION OBJECT------
        if(object(before_x,after_x)){
            output.insert(element);
        }
        before_x.erase(element);
        after_x.insert(element);
    }
    return output;
}

这是函数对象:

class Functor
{
    public:
        bool operator()( SetInt &before_x, SetInt &after_x){
            bool res=true;
            for(int curr_1: before_x){

//------------not getting here---------------!!!!!!!!!!!!!!
                for(int curr_2: after_x){
                    if(curr_1>curr_2){
                        res=false;
                        break;
                    }
                }
            }
            std::cout<<"lla"<<std::endl;
            return res;
        };
};

你从来没有把任何东西放进before_x所以当然循环不会做任何事情。