c++中map与set的基本使用

发布于:2024-05-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

c++中的map容器与set容器

map的所有函数方法及其用法

在C++中,std::map 是一个关联容器,它包含可以重复的键值对(实际上,std::map中的键是唯一的)。每个元素都有一个唯一的键和一个与之关联的值。std::map通常按照其键的升序对元素进行排序。

以下是一些std::map的常用成员函数及其用法:

  1. 构造函数和析构函数

    • map(): 默认构造函数,创建一个空的map
    • map(const map& other): 拷贝构造函数。
    • ~map(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回map中元素的数量。
    • bool empty() const noexcept: 如果map为空,则返回true
  3. 元素访问

    • 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: 同上,但返回常量迭代器。
  4. 插入和删除

    • 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: 删除所有元素。
  5. 修改器

    • void swap(map& other) noexcept: 交换两个map的内容。
  6. 迭代器

    • 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: 同上,但返回常量反向迭代器。
  7. 观察者

    • 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的常用成员函数及其用法:

  1. 构造函数和析构函数

    • set(): 默认构造函数,创建一个空的set
    • set(const set& other): 拷贝构造函数。
    • ~set(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回set中元素的数量。
    • bool empty() const noexcept: 如果set为空,则返回true
  3. 元素访问

    • 由于set不存储值,因此没有直接访问元素值的函数。但是,你可以通过迭代器来遍历set中的所有元素。
  4. 插入和删除

    • 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: 删除所有元素。
  5. 查找

    • 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,这个范围可能只包含一个元素或为空。
  6. 迭代器

    • std::map类似,std::set也提供了一系列相似的迭代器函数来遍历容器中的元素。
  7. 观察者

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