Если вы используете балансировщик нагрузки, вы должны сохранять сессию централизованной для доступа через несколько серверов. Поэтому используйте драйвер сессии как базу данных вместо файла и выполняйте связанную миграцию. См. здесь .
Можно записать собственную функцию смещения. Вот простой:
#include <iterator>
#include <algorithm>
template <typename Container, typename ValueType, typename Distance>
void shift(Container &c, const ValueType &value, Distance shifting)
{
typedef typename Container::iterator Iter;
// Here I assumed that you shift elements denoted by their values;
// if you have their indexes, you can use advance
Iter it = find(c.begin(), c.end(), value);
Iter tmp = it;
advance(it, shifting);
c.erase(tmp);
c.insert(it, 1, value);
}
Можно затем использовать его как этот:
vector<int> v;
// fill vector to, say, {1,2,3,4,5}
shift(v, 4, -2); // v = {1,4,2,3,5}
shift(v, 3, 1); // v = {1,4,2,5,3}
Это - наивная реализация, потому что при смещении нескольких элементов, find
будет выполнять итерации много раз в начале контейнера. Кроме того, это предполагает, что каждый элемент уникален, который не мог бы иметь место. Однако я надеюсь, что это дало Вам некоторые подсказки, как реализовать то, в чем Вы нуждаетесь.
Разве Вы не можете сделать простой вставки и затем стереться?
Не забывайте лишение законной силы любых итераторов, которые обращаются к элементам выше удаления или точки вставки, какой бы ни является самым низким.
HTH
удачи,
Ограбить