C++ 在c+中具有设定值的映射+;
当我试图打印C++ 在c+中具有设定值的映射+;,c++,map,set,C++,Map,Set,当我试图打印映射的值时遇到问题,这是一个集。 我必须实现Map和Set的所有功能(没有使用Map或Set库),但我确信它们可以正常工作。printSet函数正在工作 简要列举我拥有的功能: #define SType string #define VType set struct setNode { SType key; setNode* left; setNode* right; setNode* parent; }; class set { public: set(
映射的值时遇到问题,这是一个集
。
我必须实现Map
和Set
的所有功能(没有使用Map
或Set库),但我确信它们可以正常工作。printSet函数正在工作
简要列举我拥有的功能:
#define SType string
#define VType set
struct setNode {
SType key;
setNode* left;
setNode* right;
setNode* parent;
};
class set {
public:
set();
bool empty();
int size();
setNode* begin();
setNode* end();
setNode* next(setNode* x);
setNode* prev(setNode* x);
SType key(setNode* x);
setNode* find(SType k);
void insert(SType k);
void erase(SType k);
void clear();
void operator=(set& s);
~set();
private:
int size_;
setNode* root_;
};
struct mapNode {
SType key;
VType value;
mapNode* left;
mapNode* right;
mapNode* parent;
};
class map {
public:
map();
bool empty();
int size();
mapNode* begin();
mapNode* end();
mapNode* next(mapNode* x);
mapNode* prev(mapNode* x);
VType& operator[](SType k);
SType key(mapNode* x);
VType value(mapNode* x);
mapNode* find(SType k);
void insert(SType k, VType v);
void erase(SType k);
void clear();
void operator=(map& s);
~map();
private:
int size_;
mapNode* root_;
};
现在,打印功能:
void printSet(set& c) {
for (setNode* i = c.begin(); i != c.end(); i = c.next(i)) {
cout << c.key(i) << " ";
}
}
void printMap(map& m){
for (mapNode* i = m.begin(); i != m.end(); i = m.next(i)) {
cout<<m.key(i)<<"\t";
printSet(m.value(i));//error in this line
cout<<endl;
}
}
void打印集(set&c){
for(setNode*i=c.begin();i!=c.end();i=c.next(i)){
cout问题是value(mapNode*x)
返回VType
这是一个临时值。
另一方面,void printSet(set&c)
通过引用获取变量
这意味着您正试图存储和访问一个非法的临时值
将打印功能更改为:
void printSet(const set& c)
void printMap(const map& m)
此外,您不能在其常量变量中使用map类的none const成员,因此您还必须使begin end key next valueconst
:
class map {
public:
map();
bool empty()const ;
int size()const ;
mapNode* begin()const;
mapNode* end()const;
mapNode* next(mapNode* x)const;
mapNode* prev(mapNode* x)const;
...
}
你为什么用#define而不是typedef
或使用
?!我不知道我能