Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
#1

Как сравнить 2 массива - C++

22.06.2014, 19:04. Просмотров 1842. Ответов 56
Метки нет (Все метки)

в общем идея.
есть строчный массив не инициализирвоанный. Массив я заполняю сам через син.
Вопрос - можно ли в зависимости от того что я введу потом сравнить через свич с доступными в свиче константами?

например. я массиву задаю данные kvadrat. и така я строка встречается в свиче... Так можно делать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int main(){
    setlocale(0,"");
    
    char s;
    int param;
    char mChoice[50];
    
    
    
    cout    << "Выберите фигуру:\n"
            <<"Квадрат(kvadrat) \n"
            <<"Круг(krug)\n"
            <<"Прямоугольник(pryamougolnik)\n"
            <<"Триугольник(rtiugolnik)\n";
            
    cin >> mChoice;
    cout    << mChoice;
 
    switch(mChoice){
        case 'kvadrat':
                cout    <<"verno - kvadrat. \n";
        case "krug":
                cout    <<"verno krug. \n";
                
    }
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
27.06.2014, 02:59     Как сравнить 2 массива #21
Цитата Сообщение от Psilon Посмотреть сообщение
IGPIGP, у вас ООП головного мозга
Где?
Вообще, вопрос ТС был связан с с использованием строковой переменной в качестве ключа, для выбора в операторе switch. Я показал вариант не повторяя сказанное. Может и не блестяще, но главное же в том, что нужен целочисленный вариант. Константы перечисления в качестве ключей оператора switch и/или индексов массива, достаточно древний прём, позволяющий писать самодокументирующий код.
http://www.c-cpp.ru/books/perechisleniya
Хотя ссылок можно найти и больше. Нет тут оверинжениаринга, а что касается ОПП головного мозга, то это же лесть?
Вот тут и виртуальное наследование предлагали. Ну и что? Так видит человек. Конечно, когда виртуальные методы могут иметь одну сигнатуру, то есть обобщение целесообразно, то это удобно. Но меню, например может предполагать совершенно различные реакции на выбор того или иного варианта. Впрочем, опять же, при желании и так можно. И никаких диагнозов. Говорю как психоаналитик, психоаналитику.
Свич кстати, хоть и громоздок, но всё же удобнее массива в том, что расширять перечисление позволяет в любом порядке. Тогда в операторе появляется новая строчка и всё.
Что до массивов, то в с++ можно явно указать тип констант перечисления, а как с этим в C#? Что, действительно нужно явно преобразовывать?
DrOffset
6854 / 4065 / 927
Регистрация: 30.01.2014
Сообщений: 6,862
27.06.2014, 03:58     Как сравнить 2 массива #22
Цитата Сообщение от Tulosba Посмотреть сообщение
вы статью-то читали или хватило заголовка? Свитч по значениям хеш-функций, вычисленных для строк - не есть свитч по строкам.
Дык такой "свитч" и в с++03 можно сделать к тому же Правда пострашнее будет выглядеть.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Где?
Тоже, честно говоря, не понял к чему это он написал.
Есть подозрение, что это он на самом деле ошибся адресом или не знает что значит сочетание "ООП головного мозга".

Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.06.2014, 09:52     Как сравнить 2 массива #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Дык такой "свитч" и в с++03 можно сделать к тому же Правда пострашнее будет выглядеть.
На шаблонах наверное?
DrOffset
6854 / 4065 / 927
Регистрация: 30.01.2014
Сообщений: 6,862
27.06.2014, 11:42     Как сравнить 2 массива #24
Цитата Сообщение от Tulosba Посмотреть сообщение
На шаблонах наверное?
Принцип посмотреть можно в boost::mpl::string. Дальше реализуется хэш-функция (ну естественно на шаблонах) и дело в шляпе.
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 12:01     Как сравнить 2 массива #25
Цитата Сообщение от IGPIGP Посмотреть сообщение
Где?
Вообще, вопрос ТС был связан с с использованием строковой переменной в качестве ключа, для выбора в операторе switch. Я показал вариант не повторяя сказанное. Может и не блестяще, но главное же в том, что нужен целочисленный вариант. Константы перечисления в качестве ключей оператора switch и/или индексов массива, достаточно древний прём, позволяющий писать самодокументирующий код.
свитч как раз идеален для выбора одного варианта из многих. Если свитчей много, и они одинаковые по смыслу, то есть смысл отрефакторить, сделать классы и уже с ними работать. Короче, все по Фаулеру
Цитата Сообщение от IGPIGP Посмотреть сообщение
Свич кстати, хоть и громоздок, но всё же удобнее массива в том, что расширять перечисление позволяет в любом порядке. Тогда в операторе появляется новая строчка и всё.
Что до массивов, то в с++ можно явно указать тип констант перечисления, а как с этим в C#? Что, действительно нужно явно преобразовывать?
С++ редко может предложить что-то, чего нету в C#, кроме низкого уровня (хотя никто не мешает самому в C# указателями бегать по памяти, так что разница больше в IL vs ASM). Если я понял, имелось ввиду что-то вроде:
C#
1
2
3
4
    public enum MyEnum
    {
        First,Second
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public static string Foo(MyEnum myEnum)
        {
            switch (myEnum)
            {
            case MyEnum.First:
                return "First catch!";
            case MyEnum.Second:
                return myEnum.ToString();
            default:
                throw new InvalidEnumArgumentException("myEnum", (int) myEnum, typeof (MyEnum));
            }
        }
Цитата Сообщение от IGPIGP Посмотреть сообщение
что касается ОПП головного мозга, то это же лесть?
нет, это диагноз

Добавлено через 2 минуты
Кстати, если также интересно, как работает switch на строках в шарпе, то вот неплохое объяснение
http://stackoverflow.com/questions/9...elseif-on-type
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
27.06.2014, 14:53     Как сравнить 2 массива #26
Цитата Сообщение от Psilon Посмотреть сообщение
как работает switch на строках в шарпе, то вот неплохое объяснение
То есть маленькие строки в многократно повторяющемся коде сравниваются медленнее, если я правильно понял. Это вполне логично. Большие и так толстые и им трудно, поэтому сравнивать их медленно это бесчеловечно.
Маппинг больших строк (как они большие от маленьких отличают?), это и есть та несложная работа, которую нужно бы сделать до компиляции, пусть даже jit. Перейти от слов к делу, то есть к целочисленной логике лучше до написания кода, а не предлагать это делать среде выполнения. Хотя конечно, писать используя такие возможности легче и быстрее.
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 14:59     Как сравнить 2 массива #27
IGPIGP, во-первых
Цитата Сообщение от IGPIGP Посмотреть сообщение
то есть маленькие строки в многократно повторяющемся коде сравниваются медленнее, если я правильно понял. Это вполне логично. Большие и так толстые и им трудно, поэтому сравнивать их медленно это бесчеловечно.
читали через строчку. Размер строк не имеет значение, вопрос в числе ветвлений switch'а.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Маппинг больших строк (как они большие от маленьких отличают?), это и есть та несложная работа, которую нужно бы сделать до компиляции, пусть даже jit. Перейти от слов к делу, то есть к целочисленной логике лучше до написания кода, а не предлагать это делать среде выполнения. Хотя конечно, писать используя такие возможности легче и быстрее.
JIT-компилятору отводится примерно 50мс на компиляцию метода, поэтому -О3 тут как-то не выходит. Зато .Net native использует С++ оптимизации для C# кода, что дает ему практически такую же производительность, запуск без фреймворка, ну и прочие прелести.
Tulosba
27.06.2014, 15:04
  #28

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
С++ оптимизации для C# кода, что дает ему практически такую же производительность, запуск без фреймворка, ну и прочие прелести.
У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"

IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
27.06.2014, 15:16     Как сравнить 2 массива #29
Цитата Сообщение от Psilon Посмотреть сообщение
Размер строк не имеет значение, вопрос в числе ветвлений switch'а.
Дык там же англицким по белому написано, что имеет. Не для числа ветвлений, а для способа сравнения - раз и способа перехода к нужной ветви, - два.
Для малых строк сравниваются строки - раз, и делается это последовательно ( if...elseif) для отыскания нужной ветки, - два.
Для "больших" - сначала создаётся словарь хеш-значение, а потом целочисленный ключ используется для прыжка в нужную ветку как индекс массива. То есть по-человечески. Но свитч нагляднее массива и проще в расширении. Я кстати этот вариант и озвучивал, - перечисление+свитч (а получилось, - массив)), - расширяй, - не хочу.

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"
Учитывая то о чём спрашивал ТС, всё достаточно равно-приближенно к теме.
Плюсовикам можно не беспокоится, - в любой книжке о C# легко найти слова вроде: "если вы пришли из с++, то здесь то что вы привыкли делать так, выглядит эдак..." и тд. и тп. то есть нужно же сначала в плюсы зайти, чтобы выйти потом. Так что всё нормально.
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 16:17     Как сравнить 2 массива #30

Не по теме:

У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"
да, евангелисты .Net они такие...


Цитата Сообщение от IGPIGP Посмотреть сообщение
Дык там же англицким по белому написано, что имеет. Не для числа ветвлений, а для способа сравнения - раз и способа перехода к нужной ветви, - два.
еще раз читаем
If the switch statement is "small enough" (where the compiler does what it thinks is best automatically) switching on strings generates code that is the same as an if/else chain.
переводим: "Если размер switch'а "достаточно мал" (тут имеется ввиду число ветвлений), свитч по строкам генерируется в if/else последовательность". Про аргументы case-выражений, в данном случае строки - ни слова.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Плюсовикам можно не беспокоится, - в любой книжке о C# легко найти слова вроде: "если вы пришли из с++, то здесь то что вы привыкли делать так, выглядит эдак..." и тд. и тп. то есть нужно же сначала в плюсы зайти, чтобы выйти потом. Так что всё нормально.
хз, лично я переходил на шарп с дельфей (синтаксис на паскалевский поначалу был немного похож, Writeln -> Console.WriteLine, Readln -> Console.ReadLine() и тп), а уже потом опускался C++->C->ASM->машкод
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
28.06.2014, 02:07     Как сравнить 2 массива #31
Цитата Сообщение от Psilon Посмотреть сообщение
переводим: "Если размер switch'а "достаточно мал"
Не могу настаивать, но... statement, это же не весь оператор как мне всегда казалось, а одна ветвь? Размер ветки и определяется размером условного выражения case, то есть размером строки. Для целых такое вообще смысла не имеет там у всех один размер. А для строк может и логично не связываться с созданием словаря для малых строк. Я так понял. Хотя если свитч с малыми строчками поместить в цикл на пару тыс. оборотов, то задумается зверь живущий в иле или нет? Он конечно умный, этого не отнять и может принимать решения во время выполнения. Ещё немного поумнеет и сможет решать, выполнить прогу или ну её (имхо).
Цитата Сообщение от Psilon Посмотреть сообщение
хз, лично я переходил на шарп с дельфей
Исключения подтверждают правила. Мне не попадалось утверждений вроде : "если вы пришли из Делфи или Pascal...", - плохо искал наверное.
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
28.06.2014, 02:13     Как сравнить 2 массива #32
Цитата Сообщение от IGPIGP Посмотреть сообщение
Исключения подтверждают правила. Мне не попадалось утверждений вроде : "если вы пришли из Делфи или Pascal...", - плохо искал наверное.
логика - уровень про. Если есть факт, который укладывается в теорию - то все зб. Если нет - то "исключения подтверждают правила". Так что угодно доказать можно.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Не могу настаивать, но... statement, это же не весь оператор как мне всегда казалось, а одна ветвь? Размер ветки и определяется размером условного выражения case, то есть размером строки.
statement это все, что начинается с фигурной скобки и заканчиваются соответствующей закрывающей скобкой. То же касается if, while, do while и тп.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
28.06.2014, 02:33     Как сравнить 2 массива #33
Цитата Сообщение от Psilon Посмотреть сообщение
Если нет - то "исключения подтверждают правила". Так что угодно доказать можно.
Это утверждение не мной придумано, да и старо как мир. Оно никогда не было аргументом доказательства и я его в этом качестве не применял. Это скорее конформизм + прагматизм, - то есть нежелание спорить с очевидным. Вы пришли не из с/с++ и всё у Вас, - более чем. С чем же тут спорить?
Цитата Сообщение от Psilon Посмотреть сообщение
statement это все, что начинается с фигурной скобки и заканчиваются соответствующей закрывающей скобкой.
То есть по смыслу это тело оператора? Пусть. Как тогда определить размер? Он чем задаётся? Если есть две ветки со строками по килобайту в каждой, это мальнький statement или большой? Сточки зрения производительности.
А свитч с сотней веток, где ключи - односимвольные строки, это уже то что требует словаря? Понятно, что и односимвольные строки медленнее чем целые сравниваются. Сначала проверка на неравенство сравнением хешей (длин например)), и если задёшево отмазаться не получилось, то потом символ за символом... Даже для одно-символьных дольше чем для целых чисел, не спорю. Но стоит ли это создания словаря с отображением на целые?
Может я и не понял статьи. Перечитаю.
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
28.06.2014, 03:56     Как сравнить 2 массива #34
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть по смыслу это тело оператора? Пусть. Как тогда определить размер? Он чем задаётся? Если есть две ветки со строками по килобайту в каждой, это мальнький statement или большой? Сточки зрения производительности.
А свитч с сотней веток, где ключи - односимвольные строки, это уже то что требует словаря? Понятно, что и односимвольные строки медленнее чем целые сравниваются. Сначала проверка на неравенство сравнением хешей (длин например)), и если задёшево отмазаться не получилось, то потом символ за символом... Даже для одно-символьных дольше чем для целых чисел, не спорю. Но стоит ли это создания словаря с отображением на целые?
Может я и не понял статьи.
ну размер в данном случае может считаться либо в строках, либо в числе ветвлений. Из контекста можно понять, что скорее смысл имеет второе толкование, потому как switch с единственным длинным условием можно безболезненно заменить на if.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Перечитаю.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Это утверждение не мной придумано, да и старо как мир. Оно никогда не было аргументом доказательства и я его в этом качестве не применял. Это скорее конформизм + прагматизм, - то есть нежелание спорить с очевидным. Вы пришли не из с/с++ и всё у Вас, - более чем. С чем же тут спорить?
это утверждение - это урезанная часть другого утверждения, уже истинного, но отрезали самое главное Это как из фразы "в СССР секса на телевидении нет" получили расхожую, имеющее место сегодня, вырезав всего 2 слова, превратили в один из основных лозунгов, почему в СССР все было плохо
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
28.06.2014, 15:16  [ТС]     Как сравнить 2 массива #35
ух вы тут и разошлись)
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
28.06.2014, 18:46     Как сравнить 2 массива #36
Цитата Сообщение от Psilon Посмотреть сообщение
Из контекста можно понять, что скорее смысл имеет второе толкование, потому как switch с единственным длинным условием можно безболезненно заменить на if.
Из контекста можно и иначе понять. statement это утверждение, то есть простой оператор. Сам switch по своей природе - составной и состоит из switch-case statements. Однако case не имеет самостоятельного смысла и выступает всегда как часть конструкции. Впрочем, часто говорят switch statement имея ввиду switch как таковой, поэтому не имею оснований спорить.
Цитата Сообщение от Psilon Посмотреть сообщение
но отрезали самое главное
Интересно что?
Если это так, то я не нарочно.
Цитата Сообщение от Psilon Посмотреть сообщение
Это как из фразы "в СССР секса на телевидении нет" получили расхожую,
Я смотрел этот телемост своими глазами и в прямом эфире. Вроде так и сказала наша дама. Впрочем, она была не из тех кто может изложить мысль и в переводе оно, конечно выстрелило. Это хорошей пример того, что тогда придумали назвать "народная дипломатия".
Дипломатия, это всё-таки дипломатия. Народная дипломатия, это извращение по определению. Люди могут и должны общаться, но не в присутствии прессы и телевидения.
Что касается вопроса о том, нужен ли C/C++ для C#, то вряд ли что-то можно доказать, опять-таки. Вам удалось начать с Делфи и достичь приличного уровня на C#. Это достойно уважения, но не станете же Вы утверждать, что знания C++ не сэкономили бы время и силы? И тем более что они усложнили бы изучение с-подобного языка C#? Си диез это же до. Бусидо можно сказать. То есть си до, а после C# ярче становится.
Цитата Сообщение от MMt Посмотреть сообщение
ух вы тут и разошлись)
Дык о сравнении же говорим. При свичах... В C#, кстати только константы могут быть ключами. Вон сколько строк насравнивали. Вам-то помогло?
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
28.06.2014, 22:26     Как сравнить 2 массива #37
Цитата Сообщение от IGPIGP Посмотреть сообщение
Интересно что?
Если это так, то я не нарочно.
оригинал звучит примерно так:
если вы говорите об исключениях из правила, видимо, и само правило всё-таки существует
что логично, а вот что исключения подтверждают правило, а не опровергает - как раз-таки ни разу

Цитата Сообщение от IGPIGP Посмотреть сообщение
Впрочем, часто говорят switch statement имея ввиду switch как таковой, поэтому не имею оснований спорить.
засим и закончим
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
29.06.2014, 15:39     Как сравнить 2 массива #38
Цитата Сообщение от Psilon Посмотреть сообщение
если вы говорите об исключениях из правила, видимо, и само правило всё-таки существует
Так и есть. Не вижу противоречия. Можно бы и так сказать: обычно когда в С# приходят люди уже знакомые с С++ то им легче, чем не знакомым, но бывают и исключения. Трактовка различных аспектов фразы вот тут:
http://lurkmore.to/%D0%98%D1%81%D0%B...B8%D0%BB%D0%BE
мне нравится. В ней достаточно всесторонне обсуждаются различные неумеренности в её толкованиях.
Цитата Сообщение от Psilon Посмотреть сообщение
засим и закончим
Вот и хорошо.
Жаль вот только накатал уже ужас<T>ный примерчик. Он просто для демонстрации того, что если реализовывается вектор для прыжка в нужный блок кода (ф-цию), то количество веток это не размер. Контейнер же произвольного доступа и нужная ветвь находится без дополнительных затрат времени. Поэтому я и понял, что размер - определяется размером сравниваемых строк. То есть я понял так что внутренне это может выглядеть на в С# как то вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
 
struct SWITCH{
vector<void (*)()> vecPfooStr;
map<string, int> dicStrInt;
void (*default_foo)();
 
SWITCH(
       vector<void (*)()> vecPfooStr_,
       vector<string> keys,
       void (*default_foo_)()
       ){
 
vecPfooStr = vecPfooStr_;
default_foo = default_foo_;
for ( vector<string>::size_type i = 0;  i < keys.size(); i++){
dicStrInt.insert(std::make_pair(keys[i], i));
}
}
void operator()(string a){
map<string, int>:: iterator were_it;
 
//вот тут поиск должен быть быстрее чем сравнением в той мере в которой
//поиск в map реализован быстро для данной библиотеки
were_it = dicStrInt.find(a);
if(were_it != dicStrInt.end()) {
vector<string>::size_type  key = dicStrInt[a];
vecPfooStr[key]();
}
else
default_foo();
}
};
 
//ветки пришлось определить отдельно))  :
void case_one(){cout<<"one"<<endl;}
void case_two(){cout<<"two"<<endl;}
void case_tree(){cout<<"tree"<<endl;}
void default_foo(){cout<<"default_foo"<<endl;}
 
int main(){
vector<void (*)()> vecPfooStr;
vecPfooStr.push_back(case_one);
vecPfooStr.push_back(case_two);
vecPfooStr.push_back(case_tree);
 
vector<string> keys;
keys.push_back("one");
keys.push_back("two");
keys.push_back("tree");
 
SWITCH mySW(vecPfooStr, keys, default_foo);
 
for (vector<string>::size_type i = 0; i < keys.size(); ++i) mySW(keys[i]);
 
 mySW("wrong key");
 
cout<<endl;
system("pause");
return 0;
}
тогда количество веток не при чем, а длина строчек - причем.

fore each( in drihks ) +
Psilon
Master of Orion
5770 / 4718 / 622
Регистрация: 10.07.2011
Сообщений: 14,195
Записей в блоге: 5
Завершенные тесты: 4
29.06.2014, 15:58     Как сравнить 2 массива #39
IGPIGP, все, что говорит этот код, что в вашей реализации размер строк имеет значение. Строки в C# - это не нуль-терминантные строки плюсов, а больше похожи на строки из паскаледельфей. Не вдаваясь в детали, сравнить строки можно за O(1) амортизированное. Причем длина строки значения не имеет. Поэтому не думаю, что для свитча длина внезапно стала иметь значение

Еще раз, для закрепления (в последний раз )
размер statement'а - это количество statement'ов, которые в него входят. Например
C++
1
2
3
4
5
if (foo)
   while(bar)
   {
      //здесь 1000 строк
   }
размер if - 1 statement, несмотря на то, что в while может быть что угодно размером в мегабайты.

смысл в том, что Dictionary - это такая хэш-таблица для пар ключ-значение. И для небольшого количества statement'ов есть смысл сделать просто if else, для большого количества элементов будет производится поиск нужной ветви по хэш-таблице, создавать которую для небольшого числа элементов дорогое удоволсьтвие, а каждый элемент хэш-таблицы - это адрес нужной ветви switch'а, на который не влияет размер строки, таким образом ,получаем второе независимое подтверждение, что длина тут не при чем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 16:41     Как сравнить 2 массива
Еще ссылки по теме:

C++ Как сравнить элемент массива с другими элементами этого же по значению?
C++ Как можно взять один элемент двумерного массива и сравнить его с элементами его строки?
C++ Как сравнить элементы массива string и char?
C++ Сравнить элементы массива
Нюансы синтаксиса: как сравнить каждый элемент массива с переменной в условии оператора if ? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,255
Записей в блоге: 3
29.06.2014, 16:41     Как сравнить 2 массива #40
Цитата Сообщение от Psilon Посмотреть сообщение
смысл в том, что Dictionary - это такая хэш-таблица для пар ключ-значение.
Для сравнимых элементов это дерево и поиск в нём быстрее или я не прав? Чем длинней строки тем больше выигрыш тогда.
Цитата Сообщение от Psilon Посмотреть сообщение
а каждый элемент хэш-таблицы - это адрес нужной ветви switch'а, на который не влияет размер строки
Совершенно верно, длинные и короткие строки отыщутся за примерно одно и тоже время, в отличие от прямого сравнения. И вывод: чем длиннее строки тем лучше использовать словарь. Там на построение придётся один раз раскошелиться.
Остаёмся при своих мнениях..., но с взаимной симпатией. Исправляю недочёт в предыдущем фрагменте:
[CPP]
drinks[] = { , , };
[/CPP]
дальше цикл и вроде правильно.
Yandex
Объявления
29.06.2014, 16:41     Как сравнить 2 массива
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru