std::vector
константного объекта, вероятно, не удастся скомпилировать из-за требования Assignable
, так как константный объект не может быть назначен. То же самое относится и к назначению движения. Это также проблема, с которой я часто сталкиваюсь при работе с векторной картой, такой как boost flat_map
или Loki AssocVector
. Так как имеет внутреннюю реализацию std::vector<std::pair<const Key,Value> >
.
Таким образом, практически невозможно выполнить постоянное ключевое требование карты, которое может быть легко реализовано для любой карты на основе узлов.
Однако можно посмотреть, означает ли std::vector<const T>
, что вектор должен хранить типизированный объект const T
, или ему просто нужно вернуть неизменяемый интерфейс при доступе.
В этом случае возможна реализация std::vector<const T>
, которая следует требованию Assignable / Move Assignable, поскольку в нем хранится объект типа T
, а не const T
. Стандартные typedefs и тип распределителя нужно немного изменить, чтобы поддерживать стандартные требования. Несмотря на то, что для поддержки такого типа vector_map
или flat_map
, вероятно, требуется значительное изменение в интерфейсе std::pair
, так как он первым и вторым предоставляет переменные-члены напрямую .