Hi Because the operator== function compares pointers and not what they're pointing to this is what I've had to do to get it to find an integer. Basically I had to wrap the basic int type within another class called Int, as show below. class Int { private: shared_ptr<int> p; public: Int(int i) {p.reset(new int); *p = i;} bool operator==(const Int& r) {return *p.get() == *r.p.get();} ~Int() {}; }; void main() { vector < Int > vec; vec.push_back(Int(1)); vec.push_back(Int(2)); vec.push_back(Int(3)); Int p(4); if (find(vec.begin(), vec.end(), p) == vec.end()) { cout << "Couldn't find it"; } } Is there a better way that doesn't involve 1) having to write a wrapper class around a basic type (or any type) and 2) doesn't involve changing the shared_ptr::operator==. [Non-text portions of this message have been removed]