Quick Q:Why does std::set seem to force the use of a const_iterator?
Quick A: A set does not allow the modification of its keys.
Recently on SO:
Why does std::set seem to force the use of a const_iterator?
A set is like a map with no values, only keys. Since those keys are used for a tree that accelerates operations on the set, they cannot change. Thus all elements must be const to keep the constraints of the underlying tree from being broken.

Have you registered for CppCon 2016 in September? Don’t delay –
Have you registered for CppCon 2016 in September? Don’t delay –
Have you registered for CppCon 2016 in September? Don’t delay –