Sorting C++;std::const结构的排序
我在向量中有以下Sorting C++;std::const结构的排序,sorting,c++11,vector,struct,constants,Sorting,C++11,Vector,Struct,Constants,我在向量中有以下struct struct ub_node { const size_t index; const double ub_dist; bool operator<(const ub_node &rhs) const { return ub_dist< rhs.ub_dist; } }; struct ub_节点{ 常数大小指数; 康斯特双乌布区; 布尔运算符 据我所知,const并不影响执行时间,只是确保程序员(me)不会做任何愚蠢的事
struct
struct ub_node {
const size_t index;
const double ub_dist;
bool operator<(const ub_node &rhs) const { return ub_dist< rhs.ub_dist; }
};
struct ub_节点{
常数大小指数;
康斯特双乌布区;
布尔运算符
据我所知,const并不影响执行时间,只是确保程序员(me)不会做任何愚蠢的事情
对
对向量进行排序会交换周围的元素,如果元素具有不可变的数据,这是不可能的(使用ub_节点
类型,您甚至不能在向量末尾以外的任何位置删除或插入元素,因为这也需要修改现有元素)
我建议您从成员中删除const
,这样就可以修改类型,然后构造代码,使程序中不应该修改它的部分只通过const ub\u节点&
或const ub\u节点*
与类交互
这意味着该类在必要时可以修改,但不会被程序中不需要修改的部分修改。这是否意味着,如果我的struct
有一个复杂的成员,例如另一个vector
,那么对其进行排序将生成这些vector
的大量副本,或者它只是改变了e reference?对结构的向量vec
排序将调用swap(vec[i],vec[j])
很多次。这是有效的还是对结构成员进行了大量赋值取决于您是否为您的类型重载了swap
,或者您的类型是否可以便宜地进行移动赋值。如果您的类重载了swap
,或者遵循了这些重载,则排序将便宜,无需复制。