У нас есть код, который изначально использовал deque в качестве контейнера.К сожалению, это не было достаточно быстро для наших измерений времени, так как для поиска или сортировки уходит довольно много времени.Итак, я недавно реорганизовал код, чтобы попытаться использовать набор вместо этого.Это определенно быстрее с точки зрения поиска и сортировки, чем deque.
Одна вещь, которую я заметил, это то, что набор был намного медленнее при обходе всех элементов.У нас есть тест, который в основном просто обходит элементы от начала до конца, пока он не совпадает со значениями, которые он ищет, и обнаружил, что набор занимает почти 5 раз больше времени, которое требуется для того, чтобы deque это сделал.
Может ли кто-нибудь объяснить, почему набор работает медленнее?Я предположил, что время будет примерно одинаковым, поскольку это просто обход всех элементов от начала до конца, но это не так.Я уже много занимался поиском, но не могу найти что-то о том, что набор медленнее перемещается по его элементам.
Обновление: set / deque содержит класс, который в основном имеет две целочисленные переменные-члены.
class Element
{
uint32_t id;
uint32_t time;
};
Compile options:
-g -pipe -funit-at-a-time
-O3 --param inline-unit-growth=10000 --param large-function-growth=10000 --param max-inline-insns-single=10000
-Wall -Wextra -Wno-aggregate-return -Wno-padded -Wno-reorder -Wno-sign-compare -Wno-unused-parameter -Wcast-align -Wcast-qual -Wdisabled-optimization -Wfloat-equal -Wno-inline -Wlarger-than-10000 -Wmissing-format-attribute -Wpointer-arith -Wredundant-decls -Wno-unknown-pragmas