C++中map和set系列元素操作

参考书籍
《C++Primer》
1.添加元素
添加元素是指添加一个元素或者一个元素范围;
返回值:
对于map、set插入后会返回一个是否插入成功的bool值,若插入成功则会返回一个指向指定元素的迭代器。
对于multi_**总是会插入,所以无需返回bool值;
(1)set
set的插入操作和之前熟悉的vector类似。

    set<int> set1;
    //插入具体的数值
    set1.insert(1);
    //插入一个范围
    set1.insert(v1.begin(),v1.end());

(2)map
map中进行插入操作时,需要知道元素类型是pair;
需要插入数据时可以显示调用pair对象,可以在insert参数中创建pair对象;

    map<string,int> map1;
    //显示的构造pair对
    map1.insert({"word",1});
    map1.insert(make_pair("word",1));
    map1.insert(pair<string,int>("word",1));

(3)关联容器的插入操作汇总

//插入指定容器的某个范围,be为指向起始位置的迭代器
c.insert(b,e);
//在指定位置插入元素,p指postion位置
c.insert(p,v);

2.删除元素
可以删除指定位置的元素,也可以删除具体的元素值;
返回值:
对于map、set返回0或1,返回0是指待删除元素不在容器中;
对于muliti_**删除的数量可能大于1;
(1)操作汇总

//从关联容器中删除关键字k,返回值为删除元素的数量
c.erase(k);
//从关联容器中删除迭代器p指向的元素,并返回p之后元素的迭代器,若p在最后,则返回c.end()
c.erase(p);
//删除迭代器b和e范围中的元素,返回e。因为这样的区间一般都是左闭右开的
c.erase(b,e);

3.下标操作
set没有下标操作,元素本身就是关键字,获取“关键字相关联的值就没有意义”
(1)map
map的下标操作是接受一个索引;
如果元素在map中则返回对应的值,不在map中则会对其进行初始化,加入新的元素。
所以只想执行查询操作是,不能使用下标运算符。

4.访问元素
lower_bound和upper_bound不适用与无序容器

//返回一个迭代器,直线第一个关键字为k的元素,若k不在容器中返回尾迭代器
c.find(k);
//返回关键字为k的元素的数量,对不允许重复关键字的容器来说,返回值是0或1
c.count(k);
//返回一个迭代器,指向第一个关键字不为小于k的迭代器
c.lower_bound(k);
//返回一个迭代器,指向第一个关键字不为大于k的迭代器
c.upper_bound(k);
//返回一个迭代器pair,指向第一个关键字等于k的迭代器对应元素范围(因为关键字是按顺序存储的)
c.equal_range(k);

你可能感兴趣的:(C++,数据结构与算法,c++)