trans_map.insert( va1Type( "pos", "suppose" ));
// напечатаем словарь
map string,string ::iterator it;
cout "Наш словарь подстановок: \n\n";
for ( it = trans_map.begin();
it != trans_map.end(); ++it )
cout "ключ: " (*it).first "\t"
"значение: " ("it).second "\n";
cout "\n\n";
// второе упрощение: жестко заданный текст
string textarray[14]={ "nah", "I", "sez", "tanx",
"cuz", "I", "wuz", "pos", "to", "not",
"cuz", "I", "wuz", "gratz" };
vector string text( textarray, textarray+14 );
vector string ::iterator iter;
// напечатаем текст
cout "Исходный вектор строк:\n\n";
int cnt = 1;
for ( iter = text-begin(); iter != text.end();
++iter,++cnt )
cout *iter ( cnt % 8 ? " " : "\n" );
cout "\n\n\n";
// map для сбора статистики
map string,int stats;
typedef map string,int ::value_type statsValType;
// здесь происходит реальная работа
for ( iter=text.begin(); iter != text.end(); ++iter )
if (( it = trans_map.find( *iter ))
!= trans_map.end() )
{
if ( stats.count( *iter ))
stats [ *iter ] += 1;
else stats.insert( statsVa1Type( *iter, 1 ));
*iter = (*it).second;
}
// напечатаем преобразованный текст
cout "Преобразованный вектор строк:\n\n";
cnt = 1;
for ( iter = text.begin(); iter != text.end();
++iter, ++cnt )
cout *iter ( cnt % 8 ? " " : "\n" );
cout "\n\n\n";
// напечатаем статистику
cout "И напоследок статистика:\n\n";
mapstring,int,lessstring,allocator::iterator siter;
for (siter=stats.begin(); siter!=stats.end(); ++siter)
cout (*siter).first " "
"было заменено "
(*siter).second
(" раз(а)\n" );
}
Вот результат работы программы:
Наш словарь подстановок:
key: 'em value: them
key: cuz value: because
key: gratz value: grateful
key: nah value: no
key: pos value: suppose
key: sez value: says
key: tanx value: thanks
key: wuz value: was
Исходный вектор строк:
nah I sez tanx cuz I wuz pos
to not cuz I wuz gratz
Преобразованный вектор строк:
no I says thanks because I was suppose
to not because I was grateful
И напоследок статистика:
cuz было заменено 2 раз(а)
gratz было заменено 1 раз(а)
nah было заменено 1 раз(а)
pos было заменено 1 раз(а)
sez было заменено 1 раз(а)
tanx было заменено 1 раз(а)
wuz было заменено 2 раз(а)
6.12.5. Удаление элементов map
Существуют три формы функции-члена erase() для удаления элементов отображения. Для единственного элемента используется erase() с ключом или итератором в качестве аргумента, а для последовательности эта функция вызывается с двумя итераторами. Например, мы могли бы позволить удалять элементы из text_map таким образом:
string removal_word;
cout "введите удаляемое слово: ";
cin removal_word;
if ( text_map-erase( remova1_word ))
cout "ok: " remova1_word " удалено\n";
else cout "увы: " remova1_word " не найдено!\n";
Альтернативой является проверка: действительно ли слово содержится в text_map?
mapstring,loc*::iterator where;
where = text_map.find( remova1_word );
if ( where == text_map-end() )
cout "увы: " remova1_word " не найдено!\n";
else {
text_map-erase( where );
cout "ok: " remova1_word " удалено!\n";
}