C++ (gcc) で次のマップがあります。
map<int, EdgeExtended> myMap;
EdgeExtended の定義は次のとおりです。
struct EdgeExtended {
int neighborNodeId;
int weight;
int arrayPointer;
bool isCrossEdge;
EdgeExtended(Edge _edge, int _arrayPointer) {
neighborNodeId = _edge.neighborNodeId;
weight = _edge.weight;
arrayPointer = arrayPointer;
isCrossEdge = _edge.isCrossEdge;
}
EdgeExtended(const EdgeExtended & _edge) {
neighborNodeId = _edge.neighborNodeId;
weight = _edge.weight;
arrayPointer = _edge.arrayPointer;
isCrossEdge = _edge.isCrossEdge;
}
EdgeExtended(int _neighborNodeId, int _weight, bool _isCrossEdge, int _arrayPointer) {
neighborNodeId = _neighborNodeId;
weight = _weight;
arrayPointer = _arrayPointer;
isCrossEdge = _isCrossEdge;
}
void setValues(int _neighborNodeId, int _weight, bool _isCrossEdge, int _arrayPointer) {
neighborNodeId = _neighborNodeId;
weight = _weight;
arrayPointer = _arrayPointer;
isCrossEdge = _isCrossEdge;
}
EdgeExtended() {
neighborNodeId = -1;
weight = -1;
arrayPointer = -1;
isCrossEdge = false;
}
};
私はこれをしたい(わかりやすい例):
EdgeMap edge;
int nodeId=18;
edge=map.erase(nodeId);
a) このコードは正しいですか? 消去はキーに対応するオブジェクトを返しますか? b) はいの場合、キーが存在しない場合、消去は何を返しますか? c)このコードが間違っている場合、キーが存在するかどうか、オブジェクトがキーにマップされているかどうかを確認し、マップからペアを消去するにはどうすればよいですか。パフォーマンスはかなり重要であるため、最も効率的な方法が必要であることを覚えておいてください。