C++ за 21 день седьмое издание



Download 1,38 Mb.
bet330/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   326   327   328   329   330   331   332   333   ...   437
Bog'liq
word1

cout

«

"Key " « iPairFound->first

«

" points

to Value:

";

cout

«

iPairFound->second « endl;













}



















else

«

"Sorry, pair with key " «

Key

« " not

in map" «

endl;

cout

СОВЕТ




Если вы используете компилятор, совместимый со стандартом C++11, при объ­







явлении итератора очень удобно использовать ключевое слово auto:

auto iPairFound = mapIntToString.find(Key);

Компилятор определяет тип итератора автоматически, выводя его из заявлен­ ного возвращаемого значения функции map::find().


Пример в листинге 20.3 демонстрирует применение функции m u ltim a p : : f i n d ().


ЛИСТИНГ 20.3. Использование функции-члена find ()




для поиска в карте пары “ключ-значение”_______



  1. #include




  1. #include




  1. #include




  1. using namespace std;








  1. template ctypename T>




  1. void DisplayContents (const T& Input)




  1. {




  1. for(auto iElement = Input.cbegin () // auto and cbegin(): C++11



9: ; iElement != Input.cend() // cend(): C++11



  1. ; ++ iElement )



11: cout « iElement->first « " -> " « iElement->second



  1. endl;

1 2 :

  1. cout « endl;




  1. }



15:



  1. int main()




  1. {




  1. map mapIntToString;








  1. mapIntToString.insert(make_pair(3, "Three"));




  1. mapIntToString.insert(make_pair(45, "Forty Five"));




  1. mapIntToString.insert(make_pair(-1, "Minus One"));




  1. mapIntToString.insert(make_pair(1000, "Thousand"));



24


25cout « "The multimap contains " « mapIntToString.size();

Простые операции с классами std::map и std::multimap библиотеки STL

469




  1. cout « " key-value pairs. They are: " « endl;








  1. // Вьшод содержимого карты на экран




  1. DisplayContents(mapIntToString);



30:



  1. cout « "Enter the key you wish tofind: ";




  1. int Key = 0;




  1. cin » Key;



34:



  1. auto iPairFound = mapIntToString.find(Key) ;




  1. if (iPairFound !=mapIntToString.end())




  1. {




  1. cout « "Key " « iPairFound->first « " points to Value: ";




  1. cout « iPairFound->second « endl;




  1. }




  1. else



42: cout « "Sorry, pair with key " « Key « " not in map"



  1. endl;



43:



  1. return 0;




  1. }



Результат


The multimap contains 4 key-value pairs. They are:


-1 -> Minus One


3 -> Three


45 -> Forty Five


1000 -> Thousand


Enter the key you wish to find: 45


Key 45 points to Value: Forty Five


Следующий запуск (где функция find() не находит соответствующего значения):


The multimap contains 4 key-value pairs. They are:


-1 -> Minus One


3 -> Three


45 -> Forty Five


1000 -> Thousand


Enter the key you wish to find: 2011


Sorry, pair with key 2011 not in map


Анализ

Строки 20-23 функции m ain () заполняют карту примерами пар, каждая из которых со­ относит целочисленный ключ со строковым значением. Когда пользователь вводит ключ, функция f i n d () в строке 35 выполняет его поиск в карте. Функция m ap: : f i n d () всегда возвращ ает итератор, который всегда имеет смысл проверять, сравнивая с итератором, возвращаемым методом e n d (), как показано в строке 36. Если итератор действительно допустим, для доступа к значению используется член класса s e c o n d (строка 39). При втором запуске вы вводите ключ 2011, которого нет в карте, и пользователю отображается сообщение об ошибке.


470 ЗАНЯТИЕ 20. Классы карт библиотеки STL




ВНИМАНИЕ! Никогда не используйте результат функции fin d () непосредственно, не про­

верив возвращенный итератор.


Поиск элементов в мультикарте STL

Если бы в листинге 20.3 использовалась мультикарта, появилась бы возможность хра­ нить в контейнере несколько пар с одинаковым ключом и необходимость поиска в значе­ ниях, ключи которых совпадают. Следовательно, в случае мультимножества вы использо­ вали бы метод m u l t i s e t : : c o u n t () для поиска количества значений, соответствующих ключу, а приращение итератора позволило бы получить доступ к следующим значениям:




auto iPairFound = mmapIntToString.find(Key);


// Проверка успеха поиска


if(iPairFound != mmapIntToString.end())
{



  1. Найти количество пар с тем же предоставленным ключом size_t nNumPairsInMap = mmapIntToString.count(1000);



for( size_t nValuesCounter = 0



  1. nValuesCounter < nNumPairsInMap // оставаться в границах




  1. ++ nValuesCounter )

{

cout

«

"Key: " «

iPairFound->first;

//

ключ

cout

«

", Value

[" « nValuesCounter

«

"]=";

cout

«

iPairFound->second « endl;

//

значение



++ iPairFound;

}


else


cout « "Element not found in the multimap";


Стирание элементов из карты или мультикарты STL

Карта и мультикарта предоставляют функцию -член e r a s e (), которая удаляет элемен­ ты из контейнера. Для удаления всех пар с определенным ключом его следует передать функции e r a s e () как параметр:




mapObject.erase (key);

Другая форма функции e r a s e () позволяет удалить определенный элемент по указы ­ вающему на него итератору:




mapObject.erase (iElement);

Вы можете удалить диапазон элементов из карты или мультикарты, используя итерато­ ры, обозначающие их границы:




mapObject.erase (iLowerBound, iUpperBound);

В листинге 20.4 показано применение функции e r a s e ().



Простые операции с классами std::map и std::multimap библиотеки STL

471

ЛИСТИНГ 20.4. Удаление элементов из мультикарты_______________________





  1. #include




  1. #include




  1. #include




  1. using namespace std;








  1. template




  1. void DisplayContents(const T& Input)




  1. {




  1. for(auto iElement = Input.cbegin () // auto и cbegin(): C++11



9: ; iElement != Input.cend() // cend(): C++11



  1. ; ++ iElement )




  1. cout« iElement->first« " -> " « iElement->second« endl;



1 2 :

  1. cout« endl;




  1. }



15:



  1. int main()




  1. {




  1. multimapcint, string> mmapIntToString;








  1. // Вставка пар "ключ-значение" в мультикарту




  1. mmapIntToString.insert(make_pair(3, "Three"));




  1. mmapIntToString.insert(make_pair(45, "Forty Five"));




  1. mmapIntToString.insert(make_pair(-1, "Minus One"));




  1. mmapIntToString.insert(make_pair(1000, "Thousand"));








  1. // Вставка дубликатов в мультикарту




  1. mmapIntToString.insert(make_pair(-1, "Minus One"));




  1. mmapIntToString.insert(make_pair(1000, "Thousand"));








  1. cout« "The multimap contains " « mmapIntToString.size ();




  1. cout« " key-value pairs. " « "They are: " « endl;




  1. DisplayContents(mmapIntToString);



33:



  1. // Удаление элемента с ключом -1 из мультикарты




  1. auto NumPairsErased = mmapIntToString.erase(-1);



36: cout« "Erased " « NumPairsErased « " pairs with -1 as key."



  1. endl;



37:



  1. // Удаление из мультикарты элемента по данному итератору




  1. auto iPairLocator = mmapIntToString.find(45);




  1. if(iPairLocator != mmapIntToString.end())




  1. {




  1. mmapIntToString.erase(iPairLocator);




  1. cout« "Erased a pair with 45 as key using an iterator"




    1. endl;




  1. }



45:



  1. // Удаление из мультикарты диапазона...





  1. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   326   327   328   329   330   331   332   333   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish