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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 144

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

ΠšΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±Ρ‰ΠΈΡ… для всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ‚Π°Π±Π». 11.7) ΠΈ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² (Ρ‚Π°Π±Π». 11.3), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Помимо этого, нСупорядочСнныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ настройки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡ… Ρ…Π΅ΡˆΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 11.4.

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ (см. Ρ€Π°Π·Π΄Π΅Π» 10.5.1).

11.2.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ассоциативного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния; ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° Π·Π°Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ значСния Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ стандартный конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт пустой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Ассоциативный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. По Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ списочная инициализация элСмСнтов:

map<string, size_t> word_count; // пустая ΠΊΠ°Ρ€Ρ‚Π°

// списочная инициализация 

set<string> exclude = {"the", "but", "and", "or", "an", "a",

                       "The", "But", "And", "Or", "An", "A"};

// Ρ‚Ρ€ΠΈ элСмСнта; authors сопоставляСт Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ

map<string, string> authors = { {"Joyce", "James"},

                                {"Austen", "Jane"},

                                {"Dickens", "Charles"} };

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‚ΠΈΠΏ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² Ρ‚ΠΈΠΏ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΈΠΏΠΎΠΌ элСмСнта Π½Π°Π±ΠΎΡ€Π° являСтся Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π°.

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ слСдуСт ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈ ΠΊΠ»ΡŽΡ‡, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. КаТдая ΠΏΠ°Ρ€Π° ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, {ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}, означая, Ρ‡Ρ‚ΠΎ вмСстС элСмСнты Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ элСмСнт ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ β€” это ΠΊΠ»ΡŽΡ‡, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°Ρ€Ρ‚Π° authors сопоставляСт Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ инициализируСтся трСмя элСмСнтами.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² multimap ΠΈ multiset

ΠšΠ»ΡŽΡ‡ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… map ΠΈ set Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ; с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт. Π£ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² multimap ΠΈ multiset Ρ‚Π°ΠΊΠΎΠ³ΠΎ ограничСния Π½Π΅Ρ‚; Π²ΠΏΠΎΠ»Π½Π΅ допустимо нСсколько элСмСнтов с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. НапримСр, Ρƒ использованной для подсчСта слов ΠΊΠ°Ρ€Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт, содСрТащий Π½Π΅ΠΊΠΎΠ΅ слово. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ словаря ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ слова.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ с Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ†Π΅Π»Ρ‹Ρ… чисСл ivec Π½Π° 20 элСмСнтов: Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ 9 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ использован для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² set ΠΈ multiset:

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 20 элСмСнтов, содСрТащий Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ

// числа ΠΎΡ‚ 0 Π΄ΠΎ 9

vector<int> ivec;

for (vector<int>::size_type i = 0; i != 10; ++i) {

 ivec.push_back(i);

 ivec.push_back(i); // ΡΠ΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ число

}

// iset содСрТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ivec;

// miset содСрТит всС 20 элСмСнтов

set<int> iset(ivec.cbegin(), ivec.cend());

multiset<int> miset(ivec.cbegin(), ivec.cend());

cout << ivec.size() << endl;  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 20

cout << iset.size() << endl;  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 10

cout << miset.size() << endl; // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 20

Π₯отя Π½Π°Π±ΠΎΡ€ iset Π±Ρ‹Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ значСниями всСго ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ivec, ΠΎΠ½ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов: ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ivec. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ miset содСрТит 20 элСмСнтов, сколько ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ ivec.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 11.2.1

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.5. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ. Когда ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½, Π° ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.6. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈ списком. Когда ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½, Π° ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.7. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ сСмьи, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠΌΠ΅Π½ Π΄Π΅Ρ‚Π΅ΠΉ. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄, способный Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ сСмьи ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π΄Π΅Ρ‚Π΅ΠΉ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сСмьи.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 11.8. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ слова Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅, Π° Π½Π΅ Π² Π½Π°Π±ΠΎΡ€Π΅. ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства использования Π½Π°Π±ΠΎΡ€Π°?

11.2.2. ВрСбования ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΊΠ»ΡŽΡ‡Π°

АссоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π°Π»Π°Π³Π°ΡŽΡ‚ ограничСния Π½Π° Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π°. ВрСбования для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ нСупорядочСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 11.4. Π£ упорядочСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (map, multimap, set ΠΈ multiset) Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ способ сравнСния элСмСнтов. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для сравнСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ < Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π°. Π’ Π½Π°Π±ΠΎΡ€Π°Ρ… Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π° соотвСтствуСт Ρ‚ΠΈΠΏΡƒ элСмСнта; Π² ΠΊΠ°Ρ€Ρ‚Π°Ρ… Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π° β€” Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΏΠ°Ρ€Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π° ΠΊΠ°Ρ€Ρ‚Ρ‹ word_count (см. Ρ€Π°Π·Π΄Π΅Π» 11.1) Π±ΡƒΠ΄Π΅Ρ‚ string. Аналогично Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π° Π½Π°Π±ΠΎΡ€Π° exclude Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ string.

Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ сортировки (см. Ρ€Π°Π·Π΄Π΅Π» 10.3.1), Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ трСбованиям, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ Π² ассоциативном ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π’ΠΈΠΏΡ‹ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ упорядочСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ собствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ (см. Ρ€Π°Π·Π΄Π΅Π» 10.3), собствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ для использования вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° < ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π—Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ строгоС сравнСниС (strict weak ordering) для Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π°. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎΠ΅ сравнСниС ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ "мСньшС", хотя наша функция ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ. Однако ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ опрСдСляСмая функция сравнСния Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ свойствами, описанными Π½ΠΈΠΆΠ΅.

β€’ Π”Π²Π° ΠΊΠ»ΡŽΡ‡Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ "мСньшС" Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°; Ссли ΠΊΠ»ΡŽΡ‡ k1 "мСньшС", Ρ‡Π΅ΠΌ k2, Ρ‚ΠΎ k2 Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ "мСньшС", Ρ‡Π΅ΠΌ k1.

β€’ Π•сли ΠΊΠ»ΡŽΡ‡ k1 "мСньшС", Ρ‡Π΅ΠΌ k2, ΠΈ ΠΊΠ»ΡŽΡ‡ k2 "мСньшС", Ρ‡Π΅ΠΌ k3, Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ k1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ "мСньшС", Ρ‡Π΅ΠΌ k3.

β€’ Π•сли Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ "мСньшС" Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Ρ‚ΠΎ эти ΠΊΠ»ΡŽΡ‡ΠΈ "эквивалСнтны". Если ΠΊΠ»ΡŽΡ‡ k1 "эквивалСнтСн" ΠΊΠ»ΡŽΡ‡Ρƒ k2 ΠΈ ΠΊΠ»ΡŽΡ‡ k2 "эквивалСнтСн" ΠΊΠ»ΡŽΡ‡Ρƒ k3, Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ k1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ "эквивалСнтСн" ΠΊΠ»ΡŽΡ‡Ρƒ k3.

Если Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° эквивалСнтны (Ρ‚.Π΅. Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π½Π΅ "мСньшС" Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ), Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ рассматриваСт ΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π°Π²Π½Ρ‹Π΅. Π‘ этими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π² ΠΊΠ°Ρ€Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ассоциирован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт, ΠΈ любой ΠΈΠ· Π½ΠΈΡ… прСдоставит доступ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ" ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <, Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² качСствС ΠΊΠ»ΡŽΡ‡Π°.

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния для Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π°

Π’ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ своих элСмСнтов, являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, слСдуСт ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ассоциативного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ послС Ρ‚ΠΈΠΏΠ° элСмСнта Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для указания Ρ‚ΠΈΠΏΠ° опрСдСляСмого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния (Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках) прСдоставляСтся ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ конструктора ΠΏΡ€ΠΈ создании ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

НапримСр, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ multiset ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Sales_data, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс Sales_data Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° <. Но для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ compareIsbn() ΠΈΠ· ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»Π° 10.3.1. Π­Ρ‚Π° функция обСспСчиваСт строгоС сравнСниС Π½Π° основании ISBN Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Sales_data. Ѐункция compareIsbn() Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs) {

 return lhs.isbn() < rhs.isbn();

}

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ собствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ multiset с двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ: Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π° Sales_data ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ сравнСния, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Ρ‚ΠΈΠΏΠΎΠΌ указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 6.7), способным ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ compareIsbn(). Когда ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого Ρ‚ΠΈΠΏΠ°, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ прСдстоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС прСдоставляСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ compareIsbn():

// Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ISBN

// элСмСнты bookstore упорядочСны ΠΏΠΎ ISBN

multiset<Sales_data, decltype(compareIsbn)*>

 bookstore(compareIsbn);

Π—Π΄Π΅ΡΡŒ для опрСдСлСния Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор decltype. ΠŸΡ€ΠΈ использовании спСцификатора decltype для получСния указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ символ * для обозначСния использования указатСля Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» 6.7). Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ bookstore осущСствляСт функция compareIsbn(). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов Π² bookstore ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ упорядочСны ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ compareIsbn(). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, элСмСнты bookstore Π±ΡƒΠ΄ΡƒΡ‚ упорядочСны ΠΏΠΎ ΠΈΡ… Ρ‡Π»Π΅Π½Ρƒ ISBN. АргумСнт конструктора ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ compareIsbn, вмСсто &compareIsbn, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ использовании ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ΠΎ автоматичСски прСобразуСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ссли это Π½ΡƒΠΆΠ½ΠΎ (см. Ρ€Π°Π·Π΄Π΅Π» 6.7). Π‘ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ &compareIsbn.