неконстантный find() в std::unordered_set

Почему в std::unordered_set() есть неконстантный find()?

iterator find( const Key& key );
const_iterator find( const Key& key ) const;

iterator такой же, как const_iterator, почему существует неконстантная версия find()?

http://en.cppreference.com/w/cpp/container/unordered_set/find


person vladon    schedule 05.12.2017    source источник
comment
@FrançoisAndrieux Я говорю о спецификаторах find() ***const*** и find() /* no const */ для метода find().   -  person vladon    schedule 05.12.2017
comment
Для согласованности со всеми другими контейнерами. Несмотря на то, что ключи set являются неизменяемыми, это позволяет разрабатывать шаблоны, которые могут работать с различными контейнерами, и эти шаблоны предполагают, что контейнер предоставляет подходящее определение для iterator класса-члена и подходящего find().   -  person Sam Varshavchik    schedule 05.12.2017
comment
@vladon Я неправильно понял вопрос. Я думал, вы спрашиваете, как использовать find для получения неконстантного итератора.   -  person François Andrieux    schedule 05.12.2017
comment
@FrançoisAndrieux Хорошо, извини :)   -  person vladon    schedule 05.12.2017
comment
iterator такой же, как const_iterator, кто это сказал?   -  person Slava    schedule 05.12.2017


Ответы (1)


iterator такой же, как const_iterator, почему существует неконстантная версия find()?

Поскольку iterator не является обязательным, как const_iterator, как указано в документации:

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

акцент мой. Поскольку они не являются обязательными, некоторый общий код может зависеть от конкретного типа итератора, возвращаемого find(), и он должен быть совместим с другими контейнерами.

person Slava    schedule 05.12.2017