Анимация
JavaScript
|
Главная Библионтека #include <гпар> #include <str1ng> #lnclude <algorithm> using namespace std: /* Объект функции для сравнения строк * - позволяет задать критерий сравнения во время выполнения * - позволяет сравнивать символы без учета регистра class RuntlmeStringCmp { public: Константы режима сравнения enum cmp mode {normal, nocase}: private: Используемый режим сравнения const cmp mode mode; Вспомогательная функция для сравнения символов без учета регистра static bool nocase compare (char cl. char c2) return toupper(cl) < toupper(c2); publ1С: Конструктор: инициализация критерия сравнения RuntlmeStringCmp (cmp mode m=normal) : mode(m) { } Сравнение bool OperatorO (const strings si. const strings s2) const { if (mode == normal) { return sl<s2: else { return lexicographical compare (si.beginO. sl.endO. s2,beginO. s2.end(). nocase compare): /* Тип контейнера: * - отображение * - ключ: string * - значение: string * - специальный тип критерия сравнения */ typedef map<string.string.RuntimeStringCmp> StringStringMap; Функция для заполнения контейнера и вывода его содержимого void fillAndPrintCStringStringMap& coll): int mainC) { Создание контейнера с критерием сравнения по умолчанию StringStringMap colli: fillAnclPrlnt(coin): Создание объекта для сравнений без учета регистра символов RuntirneStringCrnp ignorecaseCRuntimeStringCmp: :nocase); Создание контейнера с критерием сравнения без учета регистра StringStringMap col 12(1gnorecase); fillAndPr1nt(coll2): void f111AndPrint(StringStr1ngMap& coll) { Вставка элементов в произвольном порядке coll["Deutschland"] = "Germany": coll["deutsch"] = "German"; со11["Накеп"] = "snag": coll["arbe1ten"] = "work": coll["Hund"] = "dog"; coll["gehen"] = "go"; coll["Unternehmen"] = "enterprise": col 1["unternehmen"] = "undertake"; coll["gehen"] = "walk"; coll["Bestatter"] = "undertaker"; Вывод элементов StringStringMap:;iterator pos; cout.setf(1 OS::left. ios::adjustf1eld); for (pos=coll .beginO; pos!=col 1 .endO : ++pos) { cout « setw(15) « pos->first.c str() « " " « pos->second « endl: cout « endl: Функция mainO создает два контейнера и вызывает д.пя них функцию fillAnPrint(), которая заполняет контейнеры одинаковыми элементами и выводит их содержимое. Однако контейнеры используют разные критерии сортировки. О Контейнер colli использует объект функции тина RuntimeStringCmp. по умолчанию сравнивающий элементы оператором <. О Контейнер со112 использует объект функции типа RuntimeStringCmp, который инициализируется значением nocase, определенным в классе RuntimeStringCmp. При включении режима nocase объект функции сортирует строки без учета регистра символов. Результат выполнения программы выглядит так;
В первой части итоговых данных выводится содержимое первого контейнера, сравнивагон1его элементы оператором <. Сначала перечисляются все ключи, начинающиеся с символов верхнего регистра, а за ними следуют ключи, начи-наюнисся с символов нижнего регистра. Во второй части ключи сравниваются без учета регистра, поэтому порядок перечисления элементов изменяется. Обратите внимаюю - вторая часть содержит на одну строку MefHiUie первой. Дело в том, что при сравнении без учета регистра слова «Untemehmcn» и «unternehmen» оказываются равными, а критерий сортировки нашего отображения ие допускает наличия дубликатов. К сожалению, в результате возникает путаница - гспючу, которому должно соответствовать значение enterpriser, соответствует значение «undertake». Вероятно, в этом примере было бы правильнее использовать мультиотображение. Обычно в качестве словарей применяется именно этот тип контейнера. Другие контейнеры STL Библиотека STL - это архитектура, а не набор классов. Кроме стандартных контейнерных классов она позволяет работать с другими структурами данных. Вместо контейнеров STL программист может использовать строки или обычные массивы или же написать собственный контейнер для особых целей. При этом он по-прежпему может применять алгоритмы (например, сортировки и.ти слияния) для своего типа контейнера. Подобная архитектура является хорошим В немецком языке существительные начинаются с прописной, а глаголы - со строчной буквы. 0 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 66 [ 67 ] 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |