У меня есть код, который выглядит так:
std::set<int> s1, s2, out;
// ... s1 and s2 are populated ...
std::set_intersection(s1.begin(), s1.end(),
s2.begin(), s2.end(),
std::inserter(out, out.end()));
Я читал вставки можно в амортизированном постоянном времени, если значение, вставленное в набор, сразу следует за итератором, заданным как "подсказка". Это, очевидно, было бы полезно при запуске заданного пересечения, тем более, что все, записанные в out
, уже находятся в отсортированном порядке.
Как я могу гарантировать эту оптимальную производительность? При создании std::inserter
, out
пуст, поэтому out.begin() == out.end()
, поэтому я не вижу, что имеет значение, указываю ли я out.begin()
или out.end()
как подсказку. Однако, если это интерпретируется при вставке каждого элемента в begin()
, похоже, что я бы не получил оптимальную алгоритмическую производительность. Можно ли это сделать лучше?