Comments 10
Строковый ключ в map — это ад )
-1
ставим -O3 и надеемся что сможем работать.
-3
Не понял в чем сарказм. Не поленился написал тест:
Выполнение 1 миллиона итераций заняло 0.204 секунды.
А теперь объясните, зачем, в конкретно указанном мною применении, нужно бОльшее быстродействие?
Каждой задаче свое решение. В здравом уме я не предложу использовать свойства с доступом по текстовому параметру в решении для микроконтроллера (да и вообще язык С++ не для подобных целей).
map<string,PropertyVariant> variant_props;
volatile int integer = 0;
string str = "Integer";
clock_t start = clock();
for( int i = 0; i < 1000000; i++ )
{
variant_props[str] = i;
integer = variant_props[str];
}
clock_t end = clock();
cout << "Elapsed: " << (double(end - start) / CLOCKS_PER_SEC) << endl;
Выполнение 1 миллиона итераций заняло 0.204 секунды.
А теперь объясните, зачем, в конкретно указанном мною применении, нужно бОльшее быстродействие?
Каждой задаче свое решение. В здравом уме я не предложу использовать свойства с доступом по текстовому параметру в решении для микроконтроллера (да и вообще язык С++ не для подобных целей).
+2
хотите быстродействия — не используйте C++
+4
Чем больше растет мап, тем дольше в нем искать элемент со строковым ключом. В вашем примере в мапе 1 элемент. Вы набейте сотню элементов в мап и попробуйте по нему порыскать;)
0
Не понял при чем здесь командная строка. ИМХО, 0.5 секунд — это долго, но все зависит от поставленной задачи. Если вас устраивает такая производительность, то, конечно, все ОК. Но, если начнутся тормоза, то знаете где искать один из ботлнеков:)
0
В самом начале статьи я в скобочках указал (может быть не так прозрачно) область применения данного класса. Моей задачей было собрать параметры командной строки и передать их одним объектом по ссылке в классы, которым параметры нужны. При этом при добавлении новых параметров не требуется менять реализацию зависимых классов, и в случае, когда в классе не используется новый параметр даже не нужна повторная компиляция.
Более того, я разместил этот код специально в блоге «Ненормальное программирование», чтобы читатели понимали, что у этого кода нет никаких претензий на повсеместное использование. Как и у автора нет претензий на идеальность этого кода, о чем я тоже написал.
0.5 секунд это очень долго, но заметьте, речь идет о миллионе записей, с доступом по строке, и миллионе чтений, в мапе из ста параметров. В моем случае это десяток элементов, которые один раз пишутся и несколько раз читаются в классах, использующих эти параметры.
Просто не нужно пихать этот класс во все немыслимые места. Не уверен, что Java или C# справились бы с подобной задачей так же быстро. Однако сплошь и рядом в этих языках используются подобные паттерны. При этом никто не говорит о низкой эффективности, когда речь идет о читаемости кода и легкости поддержки.
Более того, я разместил этот код специально в блоге «Ненормальное программирование», чтобы читатели понимали, что у этого кода нет никаких претензий на повсеместное использование. Как и у автора нет претензий на идеальность этого кода, о чем я тоже написал.
0.5 секунд это очень долго, но заметьте, речь идет о миллионе записей, с доступом по строке, и миллионе чтений, в мапе из ста параметров. В моем случае это десяток элементов, которые один раз пишутся и несколько раз читаются в классах, использующих эти параметры.
Просто не нужно пихать этот класс во все немыслимые места. Не уверен, что Java или C# справились бы с подобной задачей так же быстро. Однако сплошь и рядом в этих языках используются подобные паттерны. При этом никто не говорит о низкой эффективности, когда речь идет о читаемости кода и легкости поддержки.
0
Sign up to leave a comment.
Articles
Change theme settings
Property в C++ (с доступом по имени, но без сеттеров)