В основном я пытаюсь записать анимацию приложения. Я делаю это по кадрам записи.Сравнение двух векторов самым эффективным способом
Итак, что я делаю, я записываю кадр (все метаданные анимации) и сравниваю его с предыдущим кадром. Если какой-либо из объектов не находится в предыдущем кадре, я сохраняю их и делаю с ними вещи, которые я не хочу, чтобы вы, ребята, знали: P
Теперь проблема в эффективности времени. Я хочу, чтобы эта функция выполнялась через полсекунды, потому что она должна быть вызвана через полсекунды. Размер рамок будет примерно 1000-1500
.
Я проверил set_difference и другие методы, и я думаю, что этого не будет достаточно для меня, потому что, прежде всего, у меня есть метаданные, которые не могут быть отсортированы. Мне пришлось бы внести много изменений и даже если бы я включил критерии сортировки, сортировка 2 векторов, а затем их сравнение является дорогостоящим.
Прямо сейчас лучшее, что я придумал, это;
просто пример не мой реальный код
auto itr1 = list1.begin();
auto itr2 = list2.begin();
for (i; i<total_items;i++)
{
if (*itr1 != *itr2)
do something
itr1++; itr2++;
}
}
Это лучшее, что я придумал и ее сложность п. Теперь он работает, если оба списка имеют одинаковый размер. Но если размер увеличивается с последней версией списка в то все элементах выходят из строя, например
a a
b b
c c
d z
e d
f e
g f
Как вы можете увидеть, если новые элементы Вставляются во втором списке, то все элементы после этого выйдут из строя. Кажется, я не могу найти способ обойти это, сохраняя вычислительное время как можно меньше. Любая помощь будет оценена по достоинству.
Является ли это только для предыдущего кадра, или любого предыдущего кадра над некоторой отрезок времени? –
1) Пожалуйста, отформатируйте свой код с отступом. 2) Знаете ли вы, что * z * был вставлен, или это сюрприз? Если это сюрприз, это только один вставленный элемент или многие? Все ли они в одном месте или посыпаны? Все это влияет на то, как это сделать. –
только предыдущий кадр. –