Hi, -- I'm trying to use shared_ptr in a stl set, but am having trouble with find() Any help? Documentation on this seems hard to find. -- Also, are the overloaded < and == useful or correct here? thanks! Output is: ------------------ 0 adding neighbor 1 0 adding neighbor 2 1 adding neighbor 0 2 adding neighbor 1 0's neighbors 1 has 1 neighbors 0 2 has 1 neighbors 1 NOT WORKING is 1 a neighbor of 0? 0 is 0 a neighbor of 1? 0 Code below: ------------------- #include<set> #include<iostream> #include<boost/shared_ptr.hpp> using namespace std; //use typedef instead in actual code #define NodePtr boost::shared_ptr<Node> // TODO: should this extend shared_ptr? class Node { private: int id; set<NodePtr> neighbors; public: Node() { } Node(int newID) { id = newID; } ~Node() { } int getID() { return id; } int addNeighbor(NodePtr newNode) { int newID; newID = newNode->id; // if not already a neighbor, add if (!isNeighbor(newID)) neighbors.insert(newNode); } set<NodePtr> getNeighbors() { return neighbors; } bool isNeighbor(int searchID) { set<NodePtr>::iterator it; // check if this neighbor already in list NodePtr searchNode(new Node(searchID)); it = neighbors.find(searchNode); // if not found, add to neighbors if (it == neighbors.end()) { return false; } //else return true; } //overload == for find() bool operator== (NodePtr otherNode) { cout << "==: " << otherNode->id << " " << id << endl; return (otherNode->id == id); } //overload < in case we want to sort bool operator< (NodePtr otherNode) { return (id < otherNode->id); } }; int main() { // the nodes are pointers to Node objects NodePtr n0(new Node(0)); NodePtr n1(new Node(1)); NodePtr n2(new Node(2)); cout << n0->getID() << " adding neighbor " << n1->getID() << endl; n0->addNeighbor(n1); cout << n0->getID() << " adding neighbor " << n2->getID() << endl; n0->addNeighbor(n2); cout << n1->getID() << " adding neighbor " << n0->getID() << endl; n1->addNeighbor(n0); // cout << n2->getID() << " adding neighbor " << n0->getID() << endl; // n2->addNeighbor(n0); cout << n2->getID() << " adding neighbor " << n1->getID() << endl; n2->addNeighbor(n1); set<NodePtr> neighbors = n0->getNeighbors(); set<NodePtr>::iterator NB; int id = n0->getID(); cout << id << "'s neighbors" << endl; for (NB = neighbors.begin(); NB != neighbors.end() ; NB++) { set<NodePtr> neighborsList = (*NB)->getNeighbors(); cout << (*NB)->getID() << " has " << neighborsList.size() << " neighbors" << endl; cout << (*neighborsList.begin())->getID() << endl; } // http://www.engr.sjsu.edu/wbarrett/SortFind.htm cout << "NOT WORKING" << endl; cout << "is 1 a neighbor of 0? " << n0->isNeighbor(1) << endl; cout << "is 0 a neighbor of 1? " << n1->isNeighbor(0) << endl; }