Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL映射、列表、集合、向量、myCompareClass的比较器类出错_C++_Stl_Comparator - Fatal编程技术网

C++ STL映射、列表、集合、向量、myCompareClass的比较器类出错

C++ STL映射、列表、集合、向量、myCompareClass的比较器类出错,c++,stl,comparator,C++,Stl,Comparator,我在做STL的比较器时遇到困难。这是我到目前为止得到的,它给了我一个错误,我无法理解问题的症结所在。我已经按照规则编写了比较器。我不知道这里的问题是什么 我的代码如下 ostream& operator<<(ostream& cout, const map<list<set<int, myCompareClass>>, vector<int>, myCompareClass> &obj) { cout &

我在做STL的比较器时遇到困难。这是我到目前为止得到的,它给了我一个错误,我无法理解问题的症结所在。我已经按照规则编写了比较器。我不知道这里的问题是什么

我的代码如下

ostream& operator<<(ostream& cout, const map<list<set<int, myCompareClass>>, vector<int>, myCompareClass> &obj)
{
    cout << "{  ";
    for (auto listIterator : obj)
    {
        cout << "[ ";
        for (auto setIterator : listIterator.first)
        {
            cout << "< ";
            for (auto intIterator : setIterator)
            {
                cout << intIterator << " ";
            }
            cout << "> ";
        }
        cout << "] ";

        cout << "( ";
        for (auto vectorIterator : listIterator.second)
        {
            cout << vectorIterator << " ";
        }
        cout << ")  ";
    }
    cout << "}";
    cout << endl;
    return cout;
}
菌类

class myCompareClass {

public:
    bool operator()(const int &p1, const int &p2)const
    {
        return p1 < p2;
    }
    
    bool operator()(const list<set<int, myCompareClass>> &p1, const list<set<int, myCompareClass>> &p2)
    {
        int sum1 = 0 , sum2 = 0 ;
        
        for (auto listIterator : p1) 
        {
            for (auto setIterator : listIterator)
            {
                sum1 += setIterator;
            }
        }

        for (auto listIterator : p2)
        {
            for (auto setIterator : listIterator)
            {
                sum2 += setIterator;
            }
        }

        return sum1 < sum2;
    }
    
    bool operator() (const map < list<set<int, myCompareClass>>, vector<int>, myCompareClass > &M1,

        const map < list<set<int, myCompareClass>>, vector<int>, myCompareClass > &M2)  const {

        int sum1 = 0 , sum2 = 0 ;

        for (auto mapIterator : M1)
        {
            for (auto listIterator : mapIterator.first)
            {
                for (auto setIterator : listIterator)
                {
                    sum1 += setIterator;
                }
            }
        }

        for (auto mapIterator : M2)
        {
            for (auto listIterator : mapIterator.first)
            {
                for (auto setIterator : listIterator)
                {
                    sum2 += setIterator;
                }
            }
        }

        return sum1 < sum2;



    }
};
class mycomparelclass{
公众:
布尔运算符()
{
返回p1&M1,
常量映射<列表,向量,MyComparClass>&M2)常量{
int sum1=0,sum2=0;
用于(自动映射器:M1)
{
对于(自动列表迭代器:mapIterator.first)
{
for(自动设置迭代器:listIterator)
{
sum1+=setIterator;
}
}
}
用于(自动映射器:M2)
{
对于(自动列表迭代器:mapIterator.first)
{
for(自动设置迭代器:listIterator)
{
sum2+=setIterator;
}
}
}
返回sum1

我重载了please post a(minimal!)和编译器错误您的一个运算符不是
const
,但是如果我没有看到错误,我不知道这是否是错误源。@Yksisarvinen我已经编辑并包含了错误。我指的是
返回p1。在每次比较中比较总和效率很低,因为每次比较都会重新计算总和,但原则上,每个元素只需计算一次,然后进行比较。但是很抱歉,这超出了您当前问题的范围,因此请在for循环中用
自动常量&
替换
自动
,以提高性能。不必要的副本是坏的。
//vectors
    vector<int> v1 = { 7,11,3 };
    vector<int> v2 = { 4,14,3 };
    vector<int> v3 = { 5,11,13 };
    vector<int> v4 = { 4,14,3 };
    vector<int> v5 = { 5,12,3 };
    vector<int> v6 = { 5,17,2 };
    vector<int> v7 = { 7,19,13 };
    vector<int> v8 = { 4,14,3 };
    vector<int> v9 = { 5,19,4 };

    //sets
    set<int, myCompareClass> g11 = { 3,5,7 };
    set<int, myCompareClass> g12 = { 2,5,8 };
    set<int, myCompareClass> g13 = { 3,6,11 };

    set<int, myCompareClass> g21 = { 3,5,17 };
    set<int, myCompareClass> g22 = { 3,5,8 };
    set<int, myCompareClass> g23 = { 1,3,6 };

    set<int, myCompareClass> g31 = { 3,4,5 };
    set<int, myCompareClass> g32 = { 2,5,18 };
    set<int, myCompareClass> g33 = { 2,6,13 };

    set<int, myCompareClass> g41 = { 5,6,13 };
    set<int, myCompareClass> g42 = { 3,4,5 };
    set<int, myCompareClass> g43 = { 3,9,11 };

    set<int, myCompareClass> g51 = { 5,7,13 };
    set<int, myCompareClass> g52 = { 1,11,15 };
    set<int, myCompareClass> g53 = { 3,6,8 };

    set<int, myCompareClass> g61 = { 3,4,13 };
    set<int, myCompareClass> g62 = { 2,5,12 };
    set<int, myCompareClass> g63 = { 2,13,16 };

    set<int, myCompareClass> g71 = { 3,5,7 };
    set<int, myCompareClass> g72 = { 2,5,8 };
    set<int, myCompareClass> g73 = { 3,6,11 };

    set<int, myCompareClass> g81 = { 3,5,17 };
    set<int, myCompareClass> g82 = { 3,5,8 };
    set<int, myCompareClass> g83 = { 1,3,6 };

    set<int, myCompareClass> g91 = { 1,7,13 };
    set<int, myCompareClass> g92 = { 1,2,15 };
    set<int, myCompareClass> g93 = { 6,16,20 };

    //lists
    list<set<int, myCompareClass>> l1 = { g11,g12,g13 };
    list<set<int, myCompareClass>> l2 = { g21,g22,g23 };
    list<set<int, myCompareClass>> l3 = { g31,g32,g33 };
    list<set<int, myCompareClass>> l4 = { g41,g42,g43 };
    list<set<int, myCompareClass>> l5 = { g51,g52,g53 };
    list<set<int, myCompareClass>> l6 = { g61,g62,g63 };
    list<set<int, myCompareClass>> l7 = { g71,g72,g73 };
    list<set<int, myCompareClass>> l8 = { g81,g82,g83 };
    list<set<int, myCompareClass>> l9 = { g91,g92,g93 };

    map<list<set<int, myCompareClass>>, vector<int>, myCompareClass> m1,m2,m3;
    m1[l1] = v1;
    m1[l2] = v2;
    m1[l3] = v3;
    m2[l4] = v4;
    m2[l5] = v5;
    m2[l6] = v6;
    m3[l7] = v7;
    m3[l8] = v8;
    m3[l9] = v9;

    
    cout << m1 << endl;
<> --> represents set
{} --> represents map
[] --> represents list
() --> represents vector

{  [ < 3 5 7 > < 2 5 8 > < 3 6 11 > ] ( 7 11 3 )  [ < 3 5 17 > < 3 5 8 > < 1 3 6 > ] ( 4 14 3 )  [ < 3 4 5 > < 2 5 18 > < 2 6 13 > ] ( 5 11 13 )}
Error   C2664   'bool myCompareClass::operator ()(const int &,const int) const': cannot convert argument 1 from 'const _Kty' to 'const std::map<std::list<std::set<int,myCompareClass,std::allocator<int>>,std::allocator<std::set<int,myCompareClass,std::allocator<int>>>>,std::vector<int,std::allocator<int>>,myCompareClass,std::allocator<std::pair<const std::list<std::set<int,myCompareClass,std::allocator<int>>,std::allocator<std::set<int,myCompareClass,std::allocator<int>>>>,std::vector<int,std::allocator<int>>>>> &' STL C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\

Error   C2056   illegal expression  STL C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\    

Error   C2664   'bool myCompareClass::operator ()(const int &,const int) const': cannot convert argument 1 from 'const _Keyty' to 'const std::map<std::list<std::set<int,myCompareClass,std::allocator<int>>,std::allocator<std::set<int,myCompareClass,std::allocator<int>>>>,std::vector<int,std::allocator<int>>,myCompareClass,std::allocator<std::pair<const std::list<std::set<int,myCompareClass,std::allocator<int>>,std::allocator<std::set<int,myCompareClass,std::allocator<int>>>>,std::vector<int,std::allocator<int>>>>> &'   STL C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\
    
Error   C2056   illegal expression  STL C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\