0
나는 연산자 오버로딩을 사용하여 여러 종류의 컨테이너를 인쇄하려고합니다. 그러나 map<int, stack<vector<int > > >
을 인쇄 할 때 스택이 있어야하는 빈 문자열을 반환합니다. 스택을 별도로 인쇄하려고해도 아무런 문제가 없습니다.연산자 오버로드를 통해지도 내용 작성
#include <vector>
#include <stack>
#include <deque>
#include <set>
#include <iostream>
#include <map>
using namespace std;
typedef struct {
string naam;
int leeftijd;
}Persoon;
ostream& operator<<(ostream& out, const Persoon &p) {
out<<"! "<<p.naam<<" "<<p.leeftijd<<" !";
return out;
}
template<typename D, typename T>
ostream& operator<<(ostream&out, map<T,D> &m) {
typename map<T,D>::iterator my_it = m.begin();
out<<"[*] ";
while(my_it != m.end()) {
cout<<my_it->first<< " -> "<<my_it->second<<" ";
my_it++;
}
out<<"[*]\n";
}
template<typename T>
ostream& operator<<(ostream& out, vector<T> &v){
out<<"[";
int i;
for(i = 0; i < v.size()-1; i++) {
out<<v[i]<<"|";
}
out<<v[i]<<"]\n";
return out;
}
template <typename T>
ostream& operator<<(ostream& out, stack<T> &s){
out<<"{";
while(!s.empty()) {
out<<"|"<<s.top()<<"|";
s.pop();
}
out<<"}\n";
return out;
}
int main() {
vector<int> v(5,3);
/*cout<<v;
stack<string> s;
s.push("Plate1");
s.push("Plate2");
s.push("Plate3");
cout<<s;
map<int, Persoon> m;
Persoon Bill = {"Bill",59};
Persoon Steven = {"Steven",79};
Persoon Rob = {"Rob",26};
m.insert(pair<int,Persoon>(59,Bill));
m.insert(pair<int,Persoon>(79,Steven));
m.insert(pair<int,Persoon>(26,Rob));
cout<<m;
*/
stack<vector<int> > s2;
s2.push(v);
s2.push(v);
cout<<s2;
map<int, stack<vector<int> > > m2;
m2.insert(pair<int, stack<vector<int> > >(5,s2));
cout<<m2;
}
코드에 몇 가지 변경을해야했습니다. ostream & operator << (ostream & out, 벡터 & v)'에서 'int i'를'size_t i '로 변경하고'ostream & operator << (ostream & out, map & m)'에'return out'을 추가하십시오. 그 후 모든 것이 잘 작동했습니다. 작업 코드 체크 아웃 : http://ideone.com/S3fXF1 –