先生,我正在实施双色图。 Here is my sample code但当我将std::map<key,val>
密钥作为用户定义的对象时,我无法实现
graph[bic].setColor("color");
map<node,node>::iterator itt=graph.begin();
node &kkk=itt->second;
cout<<"not work "<<kkk<<endl;
因为未找到密钥bic(节点类型),并且在map stl []操作符中创建引用并使用默认值返回它。 Reference但另一方面
map<node,node>::iterator fnd=find(graph.begin(),graph.end(),bic);
if(fnd==graph.end())
cout<<"not find"<<endl;
else{
node& ch=fnd->second;
ch.setColor("yellow");
}
map<node,node>::iterator it=graph.begin();
node &pp=it->second;
cout<<"work "<<pp<<endl;
当我插入地图的第一个值时。下一个是检查密钥是否存在的冗长过程。我想要重载map stl的下标operator []来访问键的值。但这给了我一个不受欢迎的事情。 如何实现这位先生?例如
node& cpyNode=graph[Node]; // Node is object of node
or
graph[Node].setcolor(); // Node is object of node
答案 0 :(得分:0)
问题在于operator<
。
在std::map
中,如果两个密钥的比较小于另一个密钥,则认为它们是等效的(不唯一)。
您当前的实现看起来像这样
bool operator < (const node& ver) const{
return (this->vertex==ver.vertex);
}
如果一个键具有相同的顶点值,它会认为一个键少于另一个键,如果你尝试graph[sing]
,你会得到更奇怪的结果。
自sing.vertex != bic.vectex
起,bic < sing
和sing < bic
的比较将返回false,std::map
会认为它们相等。
只需将operator<
更改为
bool operator < (const node& ver) const{
return vertex < ver.vertex;
}
你会得到你期望的结果。