c++中的map容器与set容器
map的所有函数方法及其用法
在C++中,std::map 是一个关联容器,它包含可以重复的键值对(实际上,std::map中的键是唯一的)。每个元素都有一个唯一的键和一个与之关联的值。std::map通常按照其键的升序对元素进行排序。
以下是一些std::map的常用成员函数及其用法:
构造函数和析构函数
map(): 默认构造函数,创建一个空的map。map(const map& other): 拷贝构造函数。~map(): 析构函数。
大小操作
size_type size() const noexcept: 返回map中元素的数量。bool empty() const noexcept: 如果map为空,则返回true。
元素访问
mapped_type& operator[](const key_type& key): 通过键访问元素(如果键不存在,则插入一个新元素)。mapped_type& at(const key_type& key): 通过键访问元素(如果键不存在,则抛出std::out_of_range异常)。mapped_type& at(const key_type& key) const: 类似上面的at,但返回常量引用。iterator find(const key_type& key): 查找键为key的元素,如果找到则返回指向该元素的迭代器,否则返回end()。const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。
插入和删除
pair<iterator,bool> insert(const value_type& val): 插入一个元素,如果键已存在则不插入。返回一个pair,其中迭代器指向插入的元素(或已存在的元素),布尔值表示是否插入了新元素。iterator insert(const_iterator pos, const value_type& val): 在指定位置之前插入元素,但位置只是提示,不保证元素真的在那里插入。iterator erase(const_iterator position): 删除指定位置的元素。size_type erase(const key_type& key): 删除键为key的元素,并返回被删除的元素数量(0或1)。iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。void clear() noexcept: 删除所有元素。
修改器
void swap(map& other) noexcept: 交换两个map的内容。
迭代器
iterator begin() noexcept: 返回指向第一个元素的迭代器。const_iterator begin() const noexcept: 同上,但返回常量迭代器。iterator end() noexcept: 返回指向容器“尾部之后”的迭代器。const_iterator end() const noexcept: 同上,但返回常量迭代器。reverse_iterator rbegin() noexcept: 返回指向最后一个元素的反向迭代器。const_reverse_iterator rbegin() const noexcept: 同上,但返回常量反向迭代器。reverse_iterator rend() noexcept: 返回指向“反向尾部之前”的反向迭代器。const_reverse_iterator rend() const noexcept: 同上,但返回常量反向迭代器。
观察者
key_compare key_comp() const: 返回用于比较键的函数对象。value_compare value_comp() const: 返回用于比较值的函数对象(实际上它使用键比较)。
这只是std::map的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。
set的所有函数方法及其用法
在C++中,std::set是一个关联容器,它包含唯一元素。与std::map类似,std::set的元素在插入时自动按键(在这种情况下,键和值相同)的升序排序。但是,与std::map不同,std::set仅存储键,并不与任何关联的值一起存储。
以下是一些std::set的常用成员函数及其用法:
构造函数和析构函数
set(): 默认构造函数,创建一个空的set。set(const set& other): 拷贝构造函数。~set(): 析构函数。
大小操作
size_type size() const noexcept: 返回set中元素的数量。bool empty() const noexcept: 如果set为空,则返回true。
元素访问
- 由于
set不存储值,因此没有直接访问元素值的函数。但是,你可以通过迭代器来遍历set中的所有元素。
- 由于
插入和删除
pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果元素已存在,则插入失败,并返回表示该元素已经存在的pair(迭代器指向已存在的元素,bool值为false)。如果元素不存在,则插入新元素,并返回表示插入成功的pair(迭代器指向新插入的元素,bool值为true)。iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素。但是请注意,由于set中的元素是有序的,因此这个位置只是一个提示,实际插入位置可能会不同。iterator erase(const_iterator position): 删除指定位置的元素。size_type erase(const key_type& key): 删除键为key的元素(如果存在),并返回被删除的元素数量(0或1)。iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。void clear() noexcept: 删除所有元素。
查找
iterator find(const key_type& key): 查找键为key的元素。如果找到,则返回指向该元素的迭代器;否则返回end()。const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。size_type count(const key_type& key) const noexcept: 返回键为key的元素的数量(对于set,这总是0或1)。iterator lower_bound(const key_type& key): 返回指向第一个不小于(即大于或等于)key的元素的迭代器。iterator upper_bound(const key_type& key): 返回指向第一个大于key的元素的迭代器。pair<iterator,iterator> equal_range(const key_type& key): 返回一个范围,其中包含所有键等于key的元素。对于set,这个范围可能只包含一个元素或为空。
迭代器
- 与
std::map类似,std::set也提供了一系列相似的迭代器函数来遍历容器中的元素。
- 与
观察者
key_compare key_comp() const: 返回用于比较键的函数对象。
这只是std::set的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。
拓展
使用 set 可以获取容器中的最大最小值:
set<int> s;
//第一个数值(最小值)的函数为*s.begin();
cout<<"s的最小值:"<<*s.begin()<<endl;
//最后一个数值(最大值)的函数为*s.rbegin();
cout<<"s的最大值为:"<<*s.rbegin()<<endl;
//或者是
cout<<"s的最大值为:"<<*(--s.end())<<endl;
//注意不能是s.end() ,因为s.end()指向的是容器“尾部之后”的迭代器