c++ set

set 容器存储互不相同的元素,使之有序的容器。

在一个set中,元素的值不能修改(总是常量元素),但它们可以被插入或删除。

内部通常由自平衡二叉搜索树实现。

下面是示例代码

#include<iostream>
#include<set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(20);
    s.insert(30);
    s.insert(10);
    cout<<"myset contains:";
    while(!s.empty())
    {
        cout<<‘ ‘<<*s.begin();
        s.erase(s.begin());
    }
    cout<<endl;

    int myints[]={21,64,17,78,49};
    set<int> myset(myints,myints+5);
    set<int>::reverse_iterator rit;

    cout<<"myset contains:";
    for(rit=myset.rbegin();rit!=myset.rend();++rit)
    {
        cout<<‘ ‘<<*rit;
    }
    cout<<endl;

    myset.clear();
    for(int i=1;i<10;i++) myset.insert(i*10);

    set<int>::iterator it=myset.begin();
    ++it;
    myset.erase(it);   //删除迭代器位置的数即20
    myset.erase(40);   //删除40
    it=myset.find(60); //查找某个数的迭代器
    myset.erase(it,myset.end());  //删除这一段

    cout<<"myset contains:";
    for(it=myset.begin();it!=myset.end();++it)
    {
        cout<<‘ ‘<<*it;
    }
    cout<<endl;

    myset.clear();
    for(int i=1;i<10;i++) myset.insert(i*10);

    set<int>::iterator itlow=myset.lower_bound(30);  //返回>=30的第一个迭代器
    set<int>::iterator itup=myset.upper_bound(60);   //返回>60的第一个迭代器

    myset.erase(itlow,itup);
    cout<<"myset contains:";
    for(set<int>::iterator it=myset.begin();it!=myset.end();++it)
    {
        cout<<‘ ‘<<*it;
    }
    cout<<endl;
    return 0;
}

setmultiset的差别在于multiset允许多个元素的值相同。

若使用multiseterase(x)会删除所有值为 xx 的元素。

unordered_set 是无序的集合,能够较快地检索,本质上是 哈希表。

下面是示例代码 我没太弄懂这里面的bucket和hash

#include<iostream>
#include<string>
#include<unordered_set>
using namespace std;
int main()
{
    unordered_set<string> myset={"red","green","blue"};
    string input;
    getline(cin,input);

    //const_iterator迭代器是不能改变其所指向的元素的值的
    unordered_set<string>::const_iterator got=myset.find(input);
    if(got==myset.end())
        cout<<"not found in myset";
    else cout<<*got<<" is in myset";
    cout<<endl;

    return 0;
}
时间: 2024-10-07 20:49:41