STL集合

string

定义迭代器

string::iterator it;

插入字符 在迭代器之前插入字符

s.insert(it,'p');

删除字符 删除迭代器指向字符

s.erase(it);

删除区间元素 左闭右开区间

s.erase(it,it+2);

替换 从a位置开始将长度为b的串替换为c字符串

s.replace(a,b,c);

查找a字符串第一次出现的位置返回下标值,找不到返回4294967295

cout<< s.find("a")<< endl;

反转字符串

reverse(s.begin(),s.end());

下面所有的STL都可用clear清空

set

定义迭代器

set<int>::iterator it;

插入值

s.insert(4);

正向遍历

    set<int>::iterator it;
    for(it=s.begin();it!=s.end();it++)
        cout<< *it<< endl;

反向遍历

    set<int>::reverse_iterator it;
    for(it=s.rbegin(); it!=s.rend(); it++)
        cout<< *it<< endl;

删除元素

s.erase(3);

检索元素

it = s.find(1);找到返回迭代器,没找到返回s.end()

重载

struct zp
{
    int a,b;
    bool operator <(const zp &c) const
    {
        return c.a>a;
    }
};
for(set<zp>::iterator it=s.begin();it!=s.end();it++)
            cout<<(*it).a<<" "<<(*it).b<< endl;
struct zp
{
    bool operator ()(const int &a,const int &b)
    {
        return a>b;
    }
};
set<int,zp> s;

multiset

定义

multiset<string> s; 操作同set

删除 同set用法
迭代器位置或区间元素
删除指定元素返回删除的个数
查找
返回找到的首个迭代器位置,没有找到返回end迭代器

map

插入 按照键值排序

map< string,int > m;
    m["qwe"]=5;

遍历

     for(map< string,int>::iterator it=m.begin(); it!=m.end(); it++)
        cout<< (*it).first<<" "<< (*it).second<< endl;

反向同set
删除

m.erase("qwe");

查找同set
重载 同set

deque

    deque<int> q;
    q.push_back(1);
    q.push_front(9);//元素个数不变将所有元素往后推一个
    q.insert(q.begin()+2,99);//替换迭代器位置云元素
    for(int i=3;i>=0;i--)
        printf("%d\n",q[i]);

list

    list<int> q;
    q.push_back(1);
    q.push_front(9);
    q.insert(++q.begin(),99);只能++或--

遍历同set
删除

    q.remove(3);
    q.pop_front();
    q.pop_back();
    q.erase(q.begin());
    find(q.begin(),q.end(),9);
    q.unique();//删除连续重复元素

排序 升序

q.sort();

bitset

    bitset<100010> b;//可下标访问修改
    b.any();//是有在1
    b.none();//是否无1
    b.set(3);//3位置上置为1
    b.set();//全置为1
    b.size();//大小
    b.reset();//和set相反
    b.flip();//全部取反
    b.flip(3);//位置取反
    cout<<b.count()<<endl;//计算1的个数
    cout<<b.to_ulong()<<endl;//按照二进制返回unsigned long 值
    cout<<b<<endl;//全部输出

stack

    stack<int> s;
    s.push(1);
    s.pop();
    s.top();
    s.empty();
    s.size();

queue

    queue<int> q;
    q.push(1);
    q.pop();
    q.empty();
    q.front();//读队首
    q.back();//读队尾
    q.size();

priority_queue

用法同queue
重载

priority_queue<zp> q;
struct zp
{
    int a,b;
    bool operator < (const zp &c) const
    {
        return c.a<a;//小到大
    }
};
priority_queue<int,vector<int>,zp> q;
struct zp
{
    bool operator () (const int &a,const int &b)
    {
        return a>b;//小到大
    }
};
### C++ STL 集合的使用方法和类型 #### 1. **STL集合概述** C++标准模板库(Standard Template Library, STL)提供了多种容器来存储数据,其中集合类容器用于管理一组对象。这些容器具有不同的特性以适应各种需求。 常见的集合类容器有 `vector`、`list`、`set`、`map` 等[^1]。每种容器都有其特定的功能和适用场景。 --- #### 2. **常用集合类型及其特点** ##### (1) **Vector** - 动态数组实现。 - 支持随机访问,效率高。 - 插入删除操作较慢(特别是在中间位置插入或删除时需移动大量元素)。 ```cpp #include <vector> std::vector<int> vec; vec.push_back(10); // 添加元素到末尾 ``` ##### (2) **List** - 双向链表结构。 - 不支持随机访问。 - 插入删除速度快(无需移动其他元素)。 ```cpp #include <list> std::list<int> lst; lst.push_back(10); // 尾部添加元素 lst.push_front(5); // 头部添加元素 ``` ##### (3) **Set** - 基于红黑树实现。 - 存储唯一键值,自动排序。 - 提供高效的查找、插入和删除操作。 ```cpp #include <set> std::set<int> st; st.insert(10); for(auto it = st.begin(); it != st.end(); ++it){ std::cout << *it << " "; // 迭代器遍历 } ``` 上述代码展示了如何通过迭代器访问 `set` 容器中的元素[^3]。 ##### (4) **Map** - 键值对映射关系。 - 自动按关键字排序。 - 查找速度较快。 ```cpp #include <map> std::map<std::string, int> mp; mp["apple"] = 5; // 插入键值对 if(mp.find("banana") != mp.end()){ std::cout << "Key exists"; } else { std::cout << "Key does not exist"; } ``` --- #### 3. **集合的操作方法** 以下是几种常见集合的操作: - **插入**: 向集合中添加新元素。 - **删除**: 移除指定元素。 - **查找**: 判断某个元素是否存在。 - **遍历**: 访问集合内的所有元素。 对于 `set` 和 `map`,可以利用迭代器完成高效遍历。 --- #### 4. **性能分析** 不同类型的集合适用于不同的应用场景。例如: - 如果需要频繁地在列表两端进行增删操作,则应优先考虑 `list`。 - 若更关注快速定位某项数值的位置或者保持有序状态,则可以选择 `set` 或者 `map`[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值