Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting C++;std::const结构的排序_Sorting_C++11_Vector_Struct_Constants - Fatal编程技术网

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
,或者遵循了这些重载,则排序将便宜,无需复制。