C++ STL映射、列表、集合、向量、myCompareClass的比较器类出错
我在做STL的比较器时遇到困难。这是我到目前为止得到的,它给了我一个错误,我无法理解问题的症结所在。我已经按照规则编写了比较器。我不知道这里的问题是什么 我的代码如下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 &
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\