2015-12-02 4 views
3

У меня есть следующие struct в vectorC++ станд :: вид сопзЬ структуры

struct ub_node { 
    const size_t index; 
    const double ub_dist; 
    bool operator<(const ub_node &rhs) const { return ub_dist< rhs.ub_dist; } 
}; 

Я хотел бы разобраться, что vector. Я пробовал использовать std::sort, но я получаю ошибку компиляции: error: use of deleted function ‘ub_node& ub_node::operator=(ub_node&&)’ со ссылкой на строку, где я делаю std::sort(result.begin(), result.end());, где result имеет тип vector<ub_node>.

Насколько я понимаю, const делает НЕ влияет на время выполнения, а лишь гарантирует, что программист (я) ничего не делать глупостей. Если это так, я могу удалить const и попытаться гарантировать, что впоследствии я не изменю узел. Может кто-то подтвердить это? Или помочь мне разобраться?

ответ

3

As far as I understand, the const does NOT affect the execution time, but merely ensures that the programmer (me) does not do anything stupid.

Исправить.

Сортировка вектора свопирует элементы вокруг, что невозможно, если элементы имеют неизменяемые данные (с вашим типом ub_node вы даже не можете удалить или вставить элемент где-либо, кроме конца вектора, поскольку это также необходимо изменять существующие элементы).

Я предлагаю вам удалить const из ваших членов, так что тип возможно изменить, а затем структурировать код так, чтобы части программы, которые не должны изменять он взаимодействует только с классом через const ub_node& или const ub_node* ,

Это означает, что класс может быть изменен, если это необходимо, но не будет изменен частями программы, которые не должны его модифицировать.

+0

Означает ли это, что если моя 'struct' имела сложный член, например. другой «вектор», а затем сортировка будет делать много копий этих 'vector' или просто изменяет ссылку? – YnkDK

+1

Сортировка вектора 'vec' вашей структуры вызовет' swap (vec [i], vec [j]) 'много раз. Независимо от того, насколько это эффективно или много назначений ваших членов структур зависит от того, перегружен ли вы 'swap' для вашего типа, или ваш тип может быть назначен более дешевым. Если ваш класс перегружает 'swap' или следует [правило 5 или правило 0] (http://en.cppreference.com/w/cpp/language/rule_of_three), сортировка будет дешевой, без копирования. –

Смежные вопросы