我正在尝试打印 map
map<map<list<int>*, vector<int>, myFunctorClass>*, int, myFunctorClass> M1{
{
new map<list<int>*, vector<int>, myFunctorClass>{
{new list<int>({91, 92, 93, 94}), vector<int>({5, 6, 7, 8})},
{new list<int>({11, 12, 13, 14}), vector<int>({5, 6, 7, 8})},
{new list<int>({12, 22, 32, 42}), vector<int>({5, 6, 7, 8})}
}, 1
},
{
new map<list<int>*, vector<int>, myFunctorClass>{
{new list<int>({11, 21, 31, 41}), vector<int>({51, 61, 71, 81})}
}, 100
},
{
new map<list<int>*, vector<int>, myFunctorClass>{
{new list<int>({12, 22, 32, 42}), vector<int>({52, 62, 72, 82})}
}, 16
}
};
cout << M1 << endl;
我使用模板来重载运算符<<
template<class T> ostream& operator<<(ostream& str, const map<T*, int, myFunctorClass>& M);
template<class T>ostream& operator<<(ostream& str, const list<T*>& L);
template<class T>ostream& operator<<(ostream& str, const vector<T>& v);
template <class T1, class T2> ostream& operator<<(ostream& str, const map<T1*, T2, myFunctorClass>& m);
template<class T>ostream& operator<<(ostream& str, const list<T*>& L) {
str << " < ";
for (auto& i : L) {
str << *i << " ";
}
str << " > ";
return str;
}
template<class T>ostream& operator<<(ostream& str, const vector<T>& v) {
str << " [ ";
for (auto& i : v) {
str << i << " ";
}
str << " ] ";
return str;
}
template <class T1, class T2> ostream& operator<<(ostream& str, const map<T1*, T2, myFunctorClass>& m) {
str << "{ ";
for (auto i : m) {
str << *i.first << " " << i.second;
}
str << "}";
return str;
}
template<class T>ostream& operator<<(ostream& str, const map<T*, int, myFunctorClass>& M) {
str << "{\n";
for (auto& i : M) {
str << " { " << i.first;
str << " " << i.second;
str << " }\n";
}
str << " \n}";
return str;
}
然而,我只能得到这样的结果
{
{ 000001EE7768F950 1 }
}
它应该打印这样的东西(数字不匹配):
{
{ < 1 2 3 > [ 5 6 7 8 ] < 4 5 3 > [ 15 6 7 8 ] < 11 2 3 > [ 5 26 7 8 ] 2 }
{ < 1 2 3 > [ 5 116 7 8 ] < 4 5 3 > [ 15 6 7 8 ] < 11 2 3 > [ 5 26 7 8 ] 100 }
{ < 1 2 13 > [ 5 26 17 8 ] < 31 2 3 > [ 5 6 77 8 ] < 45 15 3 > [ 11 6 17 8 ] 50 }
}
我做错了什么,它只打印地址并且只打印整个地图中的一个元素?
调用最后一个
operator<<
函数,它在 M
上执行一次循环,因为顶层地图中有一个元素。它按预期打印指向 T
的指针和整数 1
。我假设您希望它输出 T
的值而不是指针。您需要将 i.first
替换为 *i.first
.
这应该产生类似的东西:
{
{ { 0x60000362d1e0 [ 5 6 7 8 ] } 1 }
}
同样,您可能希望输出值而不是内部结构的指针。