Magma: Okay then, missed your edit. So if I should use a heap, would make_heap suffice, on a vector? In that case, how would I cross reference it to a map without having to remake the whole heap each time...? References definitely will break, while iterators could break.
If you want to cross-reference the heap with a map, you'd need a full-featured heap with map coordinates as data keys and the f_value as priority, and you'd need to synchronize the heap with a map that stores the heap index of every node in the corresponding node field, which means that every addKey(), siftUp() or popFirst() operation on the heap needs to update the map as well. You'd need to write the entire data structure from scratch.
This would allow you to quickly (O(1) quickly) find an element in a heap and update its f_value, but given the nature of your data, it seems that this is actually not really worth the effort. What I'd suggest you do instead (and this is probably even faster than the other method) is just store all your f_values in a heap<pair<f_value, coordinates> > with the possibility of duplicate entries. You'll need a map<coordinates, f_value> to avoid putting too many duplicates of nodes into the heap (you only want to add to the heap when your f_value is a new minimum), and a map<coordinates, bool> to flag a node as belonging to the closed_set when you first pull it out of the heap, which allows you to ignore all further occurrences of the node in the heap.