#include <iostream>
#include <map>
#include <string>
struct Node
{
Node(const std::string& name, int weight) :
name_(name),
weight_(weight)
{}
std::string name_;
int weight_;
};
bool operator<(const Node& lhs, const Node& rhs){
return lhs.name_ < rhs.name_;
}
using Graph = std::map < Node, std::map< Node, int>>;
int main()
{
Graph graph;
Node A("A", 3);
Node B("B", 1);
Node C("C", 4);
graph[A][B] = 5;
graph[A][C] = 1;
graph[B][C] = 7;
std::cout << graph[A][C]<<'\n'; //inja weight edge(A,C) yani 1 chap mishe
//Chap ras haye motasel be A
auto& connected= graph[A];
for (auto& edge_weight : connected){
std::cout << "Edge : (" << A.name_ << "," <<
edge_weight.first.name_ << ") Weight : " <<
edge_weight.second << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IE5vZGUKewoJTm9kZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHdlaWdodCkgOgoJCW5hbWVfKG5hbWUpLAoJCXdlaWdodF8od2VpZ2h0KQoJe30KCXN0ZDo6c3RyaW5nIG5hbWVfOwoJaW50IHdlaWdodF87Cn07Cgpib29sIG9wZXJhdG9yPChjb25zdCBOb2RlJiBsaHMsIGNvbnN0IE5vZGUmIHJocyl7CglyZXR1cm4gbGhzLm5hbWVfIDwgcmhzLm5hbWVfOwp9Cgp1c2luZyBHcmFwaCA9IHN0ZDo6bWFwIDwgTm9kZSwgc3RkOjptYXA8IE5vZGUsIGludD4+OwoKaW50IG1haW4oKQp7CiAgICAgR3JhcGggZ3JhcGg7CgoJTm9kZSBBKCJBIiwgMyk7CglOb2RlIEIoIkIiLCAxKTsKCU5vZGUgQygiQyIsIDQpOwoJZ3JhcGhbQV1bQl0gPSA1OwoJZ3JhcGhbQV1bQ10gPSAxOwoJZ3JhcGhbQl1bQ10gPSA3OwoKCXN0ZDo6Y291dCA8PCBncmFwaFtBXVtDXTw8J1xuJzsgLy9pbmphIHdlaWdodCBlZGdlKEEsQykgeWFuaSAxIGNoYXAgbWlzaGUKCgkvL0NoYXAgcmFzIGhheWUgbW90YXNlbCBiZSBBCglhdXRvJiBjb25uZWN0ZWQ9IGdyYXBoW0FdOwoJZm9yIChhdXRvJiBlZGdlX3dlaWdodCA6IGNvbm5lY3RlZCl7CgkJc3RkOjpjb3V0IDw8ICJFZGdlIDogKCIgPDwgQS5uYW1lXyA8PCAiLCIgPDwKCQkJZWRnZV93ZWlnaHQuZmlyc3QubmFtZV8gPDwgIikgV2VpZ2h0IDogIiA8PAoJCQllZGdlX3dlaWdodC5zZWNvbmQgPDwgJ1xuJzsKCX0KCn0=