次のように定義されたEdgeクラスがあります
class Edge {
public:
//constructors & destructors
Edge();
Edge(const Edge& orig);
virtual ~Edge();
Edge(unsigned const int, const string&, const string&);
//getters & setters
unsigned int GetCost() const {return cost;}
//member functions
bool operator<(const Edge*) const;
private:
unsigned int cost; //cost of the edge
string cities[2]; //cities that the edge connect
};
//cpp file
bool Edge::operator<(const Edge* e) const {
cout << "edge" << endl; //function is never invoked
return this->cost < e->GetCost();
}
これらのエッジ (最初はベクターに含まれている) を Edge* セットに保持したいのですが、対応する main() のコードは次のとおりです。
set<Edge*> edge_set;
vector<Edge*> edges;
print_vector(edges);
srand((unsigned)time(NULL));
while(edge_set.size() < K){ //randomly pick K edges that will form the tree
edge_set.insert(edges[rand()%edges.size()]);
}
print_set(edge_set);
出力が得られます:
Edge vector:
edges[0] cost = 136
edges[1] cost = 558
edges[2] cost = 872
edges[3] cost = 1615
edges[4] cost = 654
edges[5] cost = 994
.
.
.
Edge set:
858
1242
436
636
804
メインでも演算子をオーバーロードする関数を定義しようとしました<
が、このセットをそのように並べ替えることができませんでした。つまり、オーバーロード<
された演算子を呼び出すことができませんでした。また、オーバーロードのパラメーターの型 (参照、ポインター、オブジェクト自体) が異なることにも注意してください<
。
ここで何が間違っていますか?この問題を解決するにはどうすればよいですか?