Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС STLΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 53

Автор Π‘ΠΊΠΎΡ‚Ρ‚ ΠœΠ΅ΠΉΠ΅Ρ€Ρ

Π‘ΠΎΠ²Π΅Ρ‚ 44. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² вмСсто ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

НСкоторыС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ содСрТат Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² STL. Π’Π°ΠΊ, Π² ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ count, find, lower_bound, upper_bound ΠΈ equal_range, Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ list прСдусмотрСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ remove, remove_if, unique, sort, merge ΠΈ reverse. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСсто ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ двумя ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ классов быстрСС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΎΠ½ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (особСнно ассоциативными), Ρ‡Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ классов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ совсСм ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.

НачнСм с ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Допустим, имССтся мноТСство set<int>, содСрТащСС ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния числа 727, Ссли ΠΎΠ½ΠΎ присутствуСт. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π΄Π²Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… способа поиска:

set<int> s; // Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ мноТСство

…           // ΠΈ занСсти Π² Π½Π΅Π³ΠΎ

            // ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ чисСл

set<int>::iterator i = s.find(727); // Ѐункция find ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

 if (i != s.end()) …

 set<int>::iterator i = find(s.begin(), s.end(), 727); // Алгоритм find

 if (i != s.end()) …

Ѐункция класса find Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с логарифмичСской ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, поэтому нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, присутствуСт Π»ΠΈ число 727 Π² мноТСствС ΠΈΠ»ΠΈ Π½Π΅Ρ‚, set::find Π² процСссС поиска Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 40 сравнСний, Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ потрСбуСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 20. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ find Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, поэтому ΠΏΡ€ΠΈ отсутствии числа 727 Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ 1 000 000 сравнСний. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π΄Π°ΠΆΠ΅ Ссли число 727 присутствуСт, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ find Π² процСссС поиска выполняСт Π² срСднСм 500 000 сравнСний. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ явно Π½Π΅ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° find.

ΠšΡΡ‚Π°Ρ‚ΠΈ, я Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π» количСство сравнСний для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ find, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ассоциативными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ красно-Ρ‡Π΅Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ β€” особая Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ сбалансированных Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² с разбалансировкой ΠΏΠΎ стСпСням 2. Π’ Ρ‚Π°ΠΊΠΈΡ… рСализациях максимальноС количСство сравнСний, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для поиска срСди ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π²Π½ΠΎ 38, Π½ΠΎ Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв трСбуСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 22 сравнСний. РСализация, основанная Π½Π° идСально сбалансированных Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 21 сравнСния, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ идСально сбалансированныС Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ «красно-Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΒ». По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ STL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ «красно-Ρ‡Π΅Ρ€Π½Ρ‹Π΅Β» Π΄Π΅Ρ€Π΅Π²ΡŒΡ.

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ класса ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ find Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ быстродСйствиСм. Как ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² совСтС 19, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ STL ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Β«ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΡΡ‚ΡŒΒ» Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ равСнства, Π° ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ эквивалСнтности. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ find ΠΈΡ‰Π΅Ρ‚ 727 ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ равСнства, Π° функция find β€” ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ эквивалСнтности. Различия Π² критСриях ΠΈΠ½ΠΎΠ³Π΄Π° приводят ΠΊ измСнСнию Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° поиска. НапримСр, Π² совСтС 19 Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° find для поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ассоциативном ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ поиск Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ find ΠΏΡ€ΠΈΠ²Π΅Π» Π±Ρ‹ ΠΊ успСху! ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ассоциативными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ find, count ΠΈ Ρ‚. Π΄. ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ алгоритмичСских, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ согласуСтся с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями этих ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ВслСдствиС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ равСнством ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

ОсобСнно ярко это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ проявляСтся ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ map ΠΈ multimap, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ эти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ содСрТат ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ pair, Π½ΠΎ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ функция count считаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Ρ‹ с ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ (СстСствСнно, «совпадСниС» опрСдСляСтся ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ эквивалСнтности); Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ассоциированноС с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, игнорируСтся. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ find, lower_bound ΠΈ Ρ‚. Π΄. ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π»ΠΈΡΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅, Π²Π°ΠΌ придСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ акробатичСскиС Ρ‚Ρ€ΡŽΠΊΠΈ, описанныС Π² совСтС 23 (Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ равСнства ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ эквивалСнтности).

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π²Ρ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅ΡΡŒ ΠΊ максимальной эффСктивности, Ρ‚ΠΎ фокусы совСта 23 Π² сочСтании с логарифмичСской ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ поиска Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ· совСта 34 ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΆ высокой Ρ†Π΅Π½ΠΎΠΉ Π·Π° ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ быстродСйствия. А Ссли Π²Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅ΡΡŒ ΠΊ максимальной эффСктивности, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± использовании нСстандартных Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (см. совСт 25), хотя Π² этом случаС Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с различиями ΠΌΠ΅ΠΆΠ΄Ρƒ равСнством ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для стандартных ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вмСсто ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ сразу нСсколькими прСимущСствами. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вмСсто Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Β«ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΡΡ‚ΡŒΒ» Π΄Π²ΡƒΡ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ провСряСтся ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ эквивалСнтности, Π±ΠΎΠ»Π΅Π΅ СстСствСнному для ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ map ΠΈ multimap автоматичСски ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ вмСсто ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° достаточно ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ говорят Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ функциям ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° list, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² STL. Π’ этом случаС ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ являСтся практичСски СдинствСнным Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. Алгоритмы, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ list ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ спСциализированныС вСрсии (remove, remove_if, unique, sort, merge ΠΈ reverse), ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, a list-вСрсии Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚; ΠΎΠ½ΠΈ просто ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ указатСлями, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠ·Π»Ρ‹ списка. По алгоритмичСской слоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ классов ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, Π½ΠΎ Ссли ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с указатСлями обходятся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ дСшСвлС копирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², list-вСрсии ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠΌ быстродСйствиСм.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ list-вСрсии часто Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³ΠΈ-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Как ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² совСтС 32, для фактичСского удалСния элСмСнтов ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² remove, remove_if ΠΈ unique Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ erase, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° list чСстно ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ элСмСнты, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ erase Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ sort ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sort ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° list Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ list, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΠΌΡƒ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ двусторонниС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ list. Алгоритм merge Ρ‚Π°ΠΊΠΆΠ΅ отличаСтся ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ merge ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° list β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходныС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ функция list::merge всСгда ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ списки, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ располагаСтС всСй Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ STL ΠΈ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ слСдуСт ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Она ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда эффСктивнСС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ интСгрируСтся с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π‘ΠΎΠ²Π΅Ρ‚ 45. Π Π°Π·Π»ΠΈΡ‡Π°ΠΉΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ count, find, binary_search, lower_bound, upper_bound ΠΈ equal_range

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅, Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π’ вашСм распоряТСнии Ρ†Π΅Π»Ρ‹ΠΉ арсСнал Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²: count, find, binary_search, lower_bound, upper_bound ΠΈ equal_range. Как ΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?

ΠžΡ‡Π΅Π½ΡŒ просто. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ критСриями Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ простота.

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° поиска ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π‘Π»ΡƒΡ‡Π°ΠΉ с поиском Π²ΠΎ всСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ стратСгии поиска ΠΌΠ½ΠΎΠ³ΠΎΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сортированный ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π». Если это условиС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ binary_search, lower_bound, upper_bound ΠΈ equal_range для провСдСния быстрого поиска (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с логарифмичСской ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ β€” см. совСт 34). Если ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π΅ отсортирован, Π²Ρ‹Π±ΠΎΡ€ ограничиваСтся Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ count, count_if, find ΠΈ find_if. Π’ дальнСйшСм описании _if-вСрсии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² count ΠΈ find ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ разновидности binary_search, lower_bound, upper_bound ΠΈ equal_range, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ пСрСдаСтся ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚. Алгоритм поиска выбираСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ сообраТСниям нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ стандартный ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΅Ρ‚Π΅ свой собствСнный.

Π˜Ρ‚Π°ΠΊ, Π² нСсортированных ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°Ρ… Π²Ρ‹Π±ΠΎΡ€ ограничиваСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ count ΠΈ find. Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅. Алгоритм count ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° вопрос: Β«ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Ссли присутствуСт β€” Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ количСствС экзСмпляров?Β». Для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° find вопрос Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ: Β«ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Ссли присутствуСт β€” Ρ‚ΠΎ Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ?Β»