BZ易风

导航

 
  • 关联式容器
  • 插入数据自动排序 按照key
  • insert 插入值
  • erase  参数可以传值 或者 迭代器
  • find() 返回值 迭代器  找不到返回的  end()
  • count 计数  对于set而言  结果 就是 0 或者1
  • lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
  • upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
  • equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
  • 对组 pair
  1. 第一个值 first
  2. 第二个值 second
  3. 默认括号
  4. make_pair()
  • set插入返回值是 对组  < 迭代器, 是否成功标示>
  • 指定set排序规则,利用仿函数
  • set插入自定义数据类型
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <set>
/*
set构造函数
set<T> st;//set默认构造函数:
mulitset<T> mst; //multiset默认构造函数:
set(const set &st);//拷贝构造函数

set赋值操作
set& operator=(const set &st);//重载等号操作符
swap(st);//交换两个集合容器

set大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空

set插入和删除操作
insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem);//删除容器中值为elem的元素。

set查找操作
find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);//查找键key的元素个数
lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。

*/
void printSet(set<int>& s)
{
    for (set<int>::iterator it = s.begin(); it != s.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    //构造
    set<int>s1;
    //关联式容器, 插入数据 key自动按从小到大排序
    s1.insert(5);
    s1.insert(1);
    s1.insert(9);
    s1.insert(7);
    s1.insert(3);
    printSet(s1);   //1 3 5 7 9

    //按迭代器位置删除
    s1.erase(s1.begin()); 
    printSet(s1);       //3 5 7 9
    s1.erase(3);        //按元素删除
    printSet(s1);       //5 7 9
}
//查找操作
void test02()
{
    set<int>s1;
    s1.insert(5);
    s1.insert(1);
    s1.insert(9);
    s1.insert(7);
    s1.insert(3);
    //对于set 没有value key就是value
    
    set<int>::iterator it = s1.find(3); //查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
    if (it != s1.end())                     //3
    {
        cout << *it << endl;       
    }
    else
    {
        cout << "未找到" << endl;
    }
    set<int>::iterator it2 = s1.find(2); 
    if (it2 != s1.end())                 //未找到   如果不判断 没找到的时候会报错
    {
        cout << *it2 << endl;        
    }
    else
    {
        cout << "未找到" << endl;      
    }
    //lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
    set<int>::iterator it3 = s1.lower_bound(3);
    if (it3 != s1.end())                 //3
    {
        cout << *it3 << endl;
    }
    else
    {
        cout << "未找到" << endl;
    }
    //upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
    set<int>::iterator it4 = s1.lower_bound(4);
    if (it4 != s1.end())                 //5
    {
        cout << *it4 << endl;
    }
    else
    {
        cout << "未找到" << endl;
    }
    //equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
    pair<set<int>::iterator, set<int>::iterator> ret = s1.equal_range(3);
    //获取第一个值
    cout << *(ret.first) << endl; //3
    cout << *(ret.second) << endl;  //5

    //count(key);  //查找key的元素个数  set只会是0或1 因为set不存在重复的key
    int num = s1.count(1);
    cout << num << endl;    //1

}
int main()
{
    test02();
    //test01();
    system("Pause");
    return 0;
}

结果:

 

posted on 2021-08-27 14:50  BZ易风  阅读(99)  评论(0编辑  收藏  举报