Метод find
Метод find класса map выполняет поиск элемента по заданному ключу. В единственный параметр метода мы передаем ключ, который хотим найти. Метод возвращает итератор на найденный элемент пары ключ-значение. Если элемент с таким ключом отсутствует в контейнере, метод возвращает итератор на конец контейнера, то есть на end.
Поскольку контейнер map хранит элементы упорядоченно по ключу, поиск выполняется за логарифмическое время O(log n). Это делает метод find эффективным способом проверки наличия ключа и доступа к связанному с ним значению.
Синтаксис
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Пример
Давайте создадим словарь и найдем в нем элемент с ключом 2:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> mp = {{1, "abcde"}, {2, "12345"}, {3, "hello"}};
auto it = mp.find(2);
if (it != mp.end()) {
cout << it->first << " " << it->second << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
2 12345
Пример
А теперь попробуем найти ключ, которого нет в контейнере:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> mp = {{1, "abcde"}, {2, "12345"}, {3, "hello"}};
auto it = mp.find(10);
if (it != mp.end()) {
cout << it->first << " " << it->second << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
"not found"
Пример
С помощью метода find удобно изменять значение, связанное с найденным ключом:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> mp = {{1, "abcde"}, {2, "12345"}, {3, "hello"}};
auto it = mp.find(1);
if (it != mp.end()) {
it->second = "new value";
}
for (auto& pair : mp) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
"1 new value"
2 12345
"3 hello"