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()指向的是容器“尾部之后”的迭代器