容器set和map的使用

本文详细介绍了C++标准库中的关联式容器set和map。set不允许重复元素且自动排序,而map由键值对组成,同样自动排序且不允许重复键值。文章讲解了set和map的迭代器使用、插入、删除、查找、修改等功能,强调了map中可以通过[]操作符访问和修改实值但不能修改键值。此外,还提供了利用map统计数组中元素出现次数的三种方法。
摘要由CSDN通过智能技术生成

set和map都是关联式容器
先介绍两个值:
键值:key 实值:value

set特性:所有的元素都会根据元素的键值(key)自动的被排序。对于set元素来说键值就是实值,实值就是键值,set不允许两个元素有相同的键值(我们不能通过set的迭代器去修改set的元素,原因后面会解释)

map特性:所有的元素都会根据元素的键值(key)自动的被排序,map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素拥有相同键值。(可以通过map的迭代器修改实值,不能修改键值)。

实际上pair的结构体为:

template<class K,class V>
struct pair
{
    k first;
    v second;
}

set

我们先来看一下set的成员函数:
的

    int a[5] = { 0, 1, 2, 4, 3 };
    set<int> set1();//建立一个空set
    set<int> set2(a, a + 5);//指定范围的set
    set<int> set3(set2);//拷贝构造函数
    set<int> set4(set2.begin(),set2.end());//使用了迭代器来构造set4
    set<int> set5 = set3;//赋值运算符重载

迭代器:
set的迭代器(左闭右开)
这里begin是指向首元素,end指向的是最后一个元素的下一个位置
rbegin和rend是倒过来的。即,rbegin是最后一个元素,rend是首元素的上一个位置
cbegin和cend是const迭代器
crbegin和crend返回的是倒过来的const迭代器。
广泛大概
这里使用begin和end来举例子

set<int>::iterator it = s2.begin();
    while (it != s2.end())
    {
        cout << *it << endl;
        ++it;
    }

遍历刚才s2,输出结果
佛挡杀佛

在C++中,可以使用迭代器来遍历set容器map容器。下面是遍历这两种容器的示例代码: 遍历set容器: ```cpp std::set<int> mySet = {1, 2, 3, 4, 5}; // 使用迭代器遍历set容器 for (std::set<int>::iterator it = mySet.begin(); it != mySet.end(); ++it) { int element = *it; // 获取当前元素的值 // 执行操作,例如打印或处理元素 } ``` 遍历map容器: ```cpp std::map<int, std::string> myMap = {{1, "apple"}, {2, "banana"}, {3, "cherry"}}; // 使用迭代器遍历map容器 for (std::map<int, std::string>::iterator it = myMap.begin(); it != myMap.end(); ++it) { int key = it->first; // 获取当前键的值 std::string value = it->second; // 获取当前值的值 // 执行操作,例如打印或处理键值对 } ``` 另外,C++11引入了范围-based for循环,也可以用于遍历set容器map容器: 遍历set容器: ```cpp std::set<int> mySet = {1, 2, 3, 4, 5}; // 使用范围-based for循环遍历set容器 for (const auto& element : mySet) { // 执行操作,例如打印或处理元素 } ``` 遍历map容器: ```cpp std::map<int, std::string> myMap = {{1, "apple"}, {2, "banana"}, {3, "cherry"}}; // 使用范围-based for循环遍历map容器 for (const auto& pair : myMap) { int key = pair.first; // 获取当前键的值 std::string value = pair.second; // 获取当前值的值 // 执行操作,例如打印或处理键值对 } ``` 请注意,在遍历map容器时,使用`pair.first`获取键,使用`pair.second`获取值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值