Метод equal_range
Метод equal_range класса map возвращает пару итераторов, определяющих диапазон элементов с заданным ключом. В отличие от multimap, где таких элементов может быть несколько, в map ключи уникальны, поэтому диапазон всегда содержит либо ровно один элемент, либо пуст. В первый параметр передается ключ, который нужно найти. Метод возвращает объект типа pair, где первый элемент - итератор на начало диапазона, а второй - итератор на конец диапазона (за последним элементом).
Синтаксис
map.equal_range(key)
Пример
Давайте создадим map с несколькими элементами и найдем диапазон для существующего ключа:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> mp = {
{"a", 1},
{"b", 2},
{"c", 3}
};
auto res = mp.equal_range("b");
for (auto it = res.first; it != res.second; ++it)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}
Результат выполнения кода:
"b 2"
Пример
Давайте попробуем найти диапазон для ключа, которого нет в map:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> mp = {
{"a", 1},
{"b", 2},
{"c", 3}
};
auto res = mp.equal_range("z");
if (res.first == res.second)
{
cout << "Key not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Key not found"
Пример
Давайте используем метод equal_range для проверки наличия ключа и вывода его значения:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> mp = {
{"a", 1},
{"b", 2},
{"c", 3}
};
auto res = mp.equal_range("a");
if (res.first != res.second)
{
cout << "Found: " << res.first->second << endl;
}
else
{
cout << "Not found" << endl;
}
return 0;
}
Результат выполнения кода:
"Found: 1"
Смотрите также
-
метод
find,
который ищет элемент по ключу -
метод
count,
который возвращает количество элементов с заданным ключом -
метод
lower_bound,
который возвращает итератор на первый элемент не меньше заданного ключа -
метод
upper_bound,
который возвращает итератор на первый элемент больше заданного ключа