std::map::equal_range
时间: 2023-09-01 19:06:54 浏览: 60
`std::map::equal_range` 是 C++ 标准库 `std::map` 类的一个成员函数。它用于在有序的 `std::map` 容器中查找给定键的范围。
该函数的语法如下:
```cpp
std::pair<iterator, iterator> equal_range(const key_type& key);
```
它接受一个键值作为参数,并返回一个 `std::pair` 对象,其中包含两个迭代器。这两个迭代器指向了 `std::map` 中键等于给定键的范围。第一个迭代器指向范围中第一个键等于给定键的元素,第二个迭代器指向范围中第一个大于给定键的元素。
这个函数通常用于判断某个键是否存在于 `std::map` 中,或者获取与给定键相关联的值的范围。你可以使用迭代器来遍历该范围并访问相应的键值对。
需要注意的是,`std::map` 是一个有序容器,它根据键的顺序进行排序。因此,`equal_range` 函数在 `std::map` 上执行二分搜索来查找给定键的范围,具有较高的效率。
相关问题
std::map有哪些函数
std::map是C++ STL库中的一个关联容器,它提供了一组键值对的映射。以下是std::map中常用的函数:
1. insert():插入一个键值对到map中
2. erase():删除一个指定键值对
3. clear():清空map中的所有键值对
4. size():返回map中键值对的数量
5. find():在map中查找指定的键,并返回指向该键值对的迭代器
6. begin():返回指向map中第一个元素的迭代器
7. end():返回指向map中最后一个元素之后位置的迭代器
8. operator[]:根据键访问元素
9. count():返回指定键在map中出现的次数
10. equal_range():返回指定范围内所有与给定键相等的元素的迭代器对
std::multimap重复元素
`std::multimap` 允许重复元素。当插入一个重复的元素时,它会被插入到容器中而不是替换掉原有的元素。如果你想删除所有重复的元素,可以使用 `std::multimap::equal_range` 函数来获取一个迭代器范围,然后用 `std::multimap::erase` 函数删除这个范围内的所有元素。以下是一个示例代码:
```c++
#include <iostream>
#include <map>
int main() {
std::multimap<int, std::string> mm;
mm.insert(std::make_pair(1, "apple"));
mm.insert(std::make_pair(2, "banana"));
mm.insert(std::make_pair(3, "orange"));
mm.insert(std::make_pair(1, "pear"));
mm.insert(std::make_pair(2, "peach"));
mm.insert(std::make_pair(3, "lemon"));
// 输出所有元素
for (auto it = mm.begin(); it != mm.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
// 删除所有键为 2 的元素
auto range = mm.equal_range(2);
mm.erase(range.first, range.second);
// 输出剩余元素
for (auto it = mm.begin(); it != mm.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
return 0;
}
```
输出结果为:
```
1: apple
1: pear
2: banana
2: peach
3: orange
3: lemon
1: apple
1: pear
3: orange
3: lemon
```
可以看到,重复的元素被保留了下来,而键为 2 的元素被删除了。