C++学习笔记——STL常用容器——set和map

set:

所有元素在插入时自动排序,底层结构用二叉树实现。

set和multiset的区别:

set不允许容器中有重复的元素,multiset允许容器中有重复的元素。

set构造和赋值:

构造:
//默认构造函数
set st;
//拷贝构造函数
set(const set &st);      

赋值:
//重载等号操作符
set& operator=(const set &st); 

set大小和交换:

//返回容器中元素的数目
size();
//判断容器是否为空
empty();
//交换两个集合容器
swap(st);

set插入和删除:

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

例子:

#include 
#include 
using namespace std;


void print_set(const set& s){
    for(set::const_iterator it=s.begin();it!=s.end();it++){
        cout<<*it<<" ";
    }
    cout< s;
    s.insert(10);
    s.insert(20);
    s.insert(15);
    s.insert(14);
    s.insert(12);
    print_set(s);

    s.erase(s.begin());
    print_set(s);

    s.erase(20);
    print_set(s);

    s.clear();
    print_set(s);
}

int main() {
    test01();
    return 0;
}

set查找和统计:

//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
find(key);
//统计key的元素个数
count(key);   

pair对组创建:

对于成对出现的数据,利用对组可以返回两个数据。

两种创建方式:

pair p ( value1, value2 );
pair p = make_pair( value1, value2 );

例子:

#include 
#include 
using namespace std;


void test01(){
    pair pair1("li",16);
    cout<<"name:"< pair2=make_pair("wang",20);
    cout<<"name:"<

set容器排序:

利用仿函数可以改变排序规则。

例子:

#include 
#include 
using namespace std;

class MyCompare{
public:
    bool operator()(int a,int b){
        return a>b;
    }
};
void test01(){
    set s;
    s.insert(5);
    s.insert(15);
    s.insert(10);
    s.insert(16);
    s.insert(20);
    s.insert(3);

//    默认从小到大
    for(set::iterator it=s.begin();it!=s.end();it++){
        cout<<*it<<" ";
    }
    cout< s2;
    s2.insert(15);
    s2.insert(10);
    s2.insert(20);
    s2.insert(16);
    for(set::iterator it=s2.begin();it!=s2.end();it++){
        cout<<*it<<" ";
    }
    cout<

map:

map中所有元素都是pair;

pair中第一个元素为key,起到索引所用,第二个元素为value;

所有元素会根据元素的key进行排序。

本质:底层使用二叉树实现。

map和multimap区别:

map中不允许容器中有重复key值的元素;

multimap允许容器中有重复key值的元素。

map构造和赋值:

构造:
//map默认构造函数: 
map mp;
//拷贝构造函数
map(const map &mp);            

赋值:
//重载等号操作符
map& operator=(const map &mp);  

map大小和交换:

//返回容器中元素的数目
size();
//判断容器是否为空
empty();
//交换两个集合容器
swap(st); 

map插入和删除:

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

map查找和统计:

//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
find(key);
//统计key的元素个数
count(key);   

例子:

#include 
#include 
using namespace std;


void print_map(map &m){
    for(map::iterator it=m.begin();it!=m.end();it++){
        cout<<"key = "<first<<" value = "<second< m;
    m.insert(make_pair(1,20));
    m.insert(make_pair(2,30));
    m.insert(make_pair(3,40));
    if(!m.empty()){
        cout<<"the size of m is : "< m;
//    第一种插入方式
    m.insert(pair(1,10));
//    第二种插入方式
    m.insert(make_pair(2,20));
//    第三种插入方式
    m.insert(map::value_type(3,30));
//    第四种插入方式
    m[4]=40;
    print_map(m);

    m.erase(m.begin());

    m.erase(2);
    print_map(m);

    m.clear();
    print_map(m);
}

void test03(){
    map m;
    m.insert(make_pair(1,20));
    m.insert(make_pair(2,30));
    m.insert(make_pair(3,40));
    if(m.find(2)!=m.end()){
        cout<<"找到了元素"<

你可能感兴趣的:(c++)