У меня есть проблема, мне недавно сообщили, что для неупорядоченного значения для ввода куча случайных значений позволяет сказать 1 миллион из них, что с использованием набора было бы более эффективным, чем использование вектора, а затем сортировка указанного вектора с функцией базового алгоритма сортировки, но когда я их использовал и проверил их через функцию времени, в терминале и valgrind, он показал, что и временная сложность, и использование пространства было быстрее для вектора, даже с добавлением вызываемой функции сортировки. Человек, который дал мне совет по использованию набора, намного более опытен, чем я, на языке C++, но мне всегда приходится проверять себя до того, как посоветоваться с людьми. Далее следуют тестовые коды.Который более эффективен, установлен или вектор
Для Набор
std::set<int> testSet;
for(int i(0); i<= 1000000; ++i)
testSet.insert(-i);
Для Vector
std::vector<int> testVector;
for(int i(0); i<= 1000000; ++i)
testVector.push_back(i * -1);
std::sort(testVector.begin(), testVector.end());
Я знаю, что это не случайные величины, это не было бы справедливо, поскольку набор не допускает дубликатов, и вектор делает sothey бы различные размеры для этой базовой точки функции. Может ли кто-нибудь уточнить, почему этот набор должен использоваться, не имеет смысла ни одного дубликата.
Я тоже не делал никаких тестов с неупорядоченным набором. Не слишком уверен в различиях между двумя заданными точками.
Их семантика ортогональна, поэтому просят об эффективности поведения. Сначала определите _efficiency_ для вашего прецедента. –
Также обратите внимание, что способ, которым вы вставляете, ужасно неэффективен. При четности одних и тех же вставок без сохранения памяти вектор, как правило, превосходит набор из-за базовой структуры данных, что является прямым для первого. – edmz
Да, я видел огромное количество бесплатных и выделенных, которые имеют место в пределах установленной структуры данных, по сравнению с 18, которые были нужны для вектора, поскольку он просто удваивается по размеру и оставляет много пустого пространства на своем пути, что может или, возможно, никогда не будет использоваться.Это было только то, что я старался быть неэффективным, насколько это возможно, с помощью вставок, но не поискать, что может быть тем, чего не хватает в этой проверке сложности, и это то, где я думаю, что набор принимает, а затем более эффективен, по крайней мере, это то, что Я собрался до сих пор. Это было сделано неправильно, чтобы наложить нагрузку на структуры данных. –