【发布时间】:2012-04-09 18:00:41
【问题描述】:
我想用一个C++的map结构,比如map<vector<DFSCode>, vector<PDB>> candidate,DFSCode和PDB是我定义的两个结构。
class DFS {
public:
int from;
int to;
int fromlabel;
int elabel;
int tolabel;
DFS(): from(0), to(0), fromlabel(0), elabel(0), tolabel(0) {};
};
struct DFSCode: public vector <DFS> {
public:
void push (int from, int to, int fromlabel, int elabel, int tolabel)
{
resize (size() + 1);
DFS &d = (*this)[size()-1];
d.from = from;
d.to = to;
d.fromlabel = fromlabel;
d.elabel = elabel;
d.tolabel = tolabel;
}
void pop () { resize (size()-1); }
};
class PDB {
public:
unsigned int tid;
unsigned int gid;
void push(int did, int vid, int vlabel)
{
tuple[did].vid = vid;
tuple[did].vlabel = vlabel;
}
PDB(): tid(0), gid(0), tuple(0) {};
};
我会生成很多包含vector<DFSCode>和PDB的数据,因为一个vector<DFSCode>可能有很多PDB,我想用vector<PDB>来存储它们。
我想做的是:
vector<DFSCode> tempdfscodeList;
PDB temppdb;
map<vector<DFSCode>, vector<PDB>> candidate;
for each `vector<DFSCode>` and `PDB` pair I generate
candidate[tempdfscodeList].push_back(temppdb);
第一个问题是:上面的代码是否满足我对“一个vector<DFSCode>包含许多PDB”的期望?
第二个问题是:我知道我必须实现一个类似的map方法,因为我使用vector<DFSCode>作为我的key,但我不知道如何实现。我试着写一个。但似乎不能满足我对“一个vector<DFSCode> 包含许多PDB”的期望,有人可以帮助我吗? :)
class dfscodeListCompare { // compare vector<DFSCode>
public:
bool operator() (const vector<DFSCode> &c1, const vector<DFSCode> &c2) const
{
for(int I = 0; I < c1.size(); I++) {
if(c1[I].size() == c2[I].size()) { // the size must be the same
for(int j = 0; j < c1[I].size(); j++) {
if((c1[I][j].from != c2[I][j].from) || (c1[I][j].to != c2[I][j].to) || (c1[I][j].fromlabel != c2[I][j].fromlabel) || (c1[I][j].elabel != c2[I][j].elabel) || (c1[I][j].tolabel != c2[I][j].tolabel))
return false; // if there exist one different
}
}
else
return false;
}
return true; // pass all condition
}
};
【问题讨论】:
-
oohhhh 继承自
vector.... :( -
你的意思是这是一个糟糕的结构吗? :(
-
为什么不给
DFS添加一个合适的构造函数来获取你想要的参数,并删除自定义的push_back。 -
STL 容器没有虚拟析构函数,仅使用指向这些类的指针是不可能正确清理它们的。见this answer
-
你的意思是我不能使用
candidate[tempdfscodeList].push_back(temppdb);??你能指出错误吗?谢谢:)
标签: c++ data-structures collections vector map