c++ - std::sort on a vector of Objects containing Objects* pointers -
c++ - std::sort on a vector of Objects containing Objects* pointers -
let's define next struct:
struct dockpose { complex* pose; int cluster; struct dockpose* dp; float distance; int density; }; typedef struct dockpose dockpose; then, declare vector sorted density value using std::sort() function. after phone call std::sort, dockpose* dp pointers still point same dockpose instance pointing before? if not, can sure dp pointers points same dockpose pointing before sorting (if there can do) ?
yes, pointers still point same instance. may not want. when phone call std::sort on vector, not alter location of instances (that's not thing can in c++). swaps values each other. improve explained simplified example. take struct:
struct foo { int x; foo* buddy; }; bool operator<(foo const& lhs, foo const& rhs) { homecoming lhs.x < rhs.x; } now, lets create vector of these, decreasing x values, , each 1 having pointer 1 comes after (and lastly having pointer first):
std::vector<foo> vec(5); (int = 0; < 5; ++i) { vec[i].x = 4 - i; vec[i].buddy = &vec[(i + 1) % 5]; } now, if sort vector, going reverse. instances don't alter location. instead, values alter such first 1 has lowest x value, , increases there. now, pointer fellow member changes along x value.
so take, example, vec[0], had x value of 4, , pointer vec[1] (which has x value of 3). after sort, values end in lastly element, vec[4]. vec[4] have x value of 4, , pointer vec[1] (which, after sort, has x value of 1).
so, before sort, element x value 4, had pointer element x value of 3. after sort, element x value of 4 has pointer element x value of 1. uncertainty wanted.
since interested in identity of instances, not values, should using std::vector<std::unique_ptr<dockpose>>. foo example, this:
std::vector<std::unique_ptr<foo>> vec; (int = 0; < 5; ++i) vec.emplace_back(new foo); (int = 0; < 5; ++i) { vec[i]->x = 4 - i; vec[i]->buddy = vec[(i + 1) % 5].get(); } note when this, need utilize different comparing function. 1 compares dereferenced pointers, rather pointers themselves.
c++ sorting vector
Comments
Post a Comment