I am of the opinion that you should implement both versions, because you need them.
If you didn't have both versions, how wrong would this program be?
It is extremely likely that both versions of the subscript operator are apparently the same. This is because the subscript operator has a simple meaning.
const std::vector<int> foo(10, 42); // create ten 42s
foo = 40; // can't change them!
std::vector<int> bar(10, 42);
bar = 40; // except when they're not const