容器map与set的增删查改

set的特性是所有元素都会根据元素的键值自动被排序。set的键值就是实值,set不允许两个元素有相同的键值。
标准的STL即以RBTree作为底层机制。
这里写图片描述
下面我做一个简单的sret测试

//#include<stdio.h>
//#include"RBTree.h"
//#include<windows.h>
//int main()
//{
//  TestRBTree();
//  system("pause");
//}
#include<set>
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    int i;
    int ia[6] = {0,1,2,3,4,5};
    set<int> iset(ia, ia+6);
    cout<<"size="<<iset.size()<<endl;
    cout<<"3 count="<<iset.count(3)<<endl;
    iset.insert(3);
    cout<<"size="<<iset.size()<<endl;
    iset.erase(1);
    cout<<"size="<<iset.size()<<endl;
    cout<<"1 count="<<iset.count(1)<<endl;

    set<int>::iterator ite1=iset.begin();
    set<int>::iterator ite2=iset.end();
    for(; ite1 != ite2; ++ite1)
    {
        cout<< *ite1;
        cout<<endl;
    }
    ite1 = iset.find(3);
    if(ite1 != iset.end())
    {
        cout<<"3 found" <<endl;
    }
    ite1 = iset.find(1);
    if(ite1 == iset.end())
    {
        cout<<"1 not found"<<endl;
    }
    //通过迭代器来修改set元素,是不能通过的
    //*ite1 = 8;
    system("pause");
}

这里写图片描述
map的特性是所有元素都会根据元素键值自动排序。map的所有元素都是pair,同时拥有value和key。map也不允许两个元素拥有相同的键值。
这里写图片描述
pair的定义

template<class K,class V>
struct pair
{
    k first;
    v second;
}

个人觉得两者的很多方面的实现都很相似
我主要看一下map中operator[]的特点
这里写图片描述
这里写图片描述
很明显可以看出来 其返回的是带&的值,即可以修改。
那么我们来试一下//该段代码引用自cplusplus

// accessing mapped values
#include <iostream>
#include <map>
#include <string>

int main ()
{
  std::map<char,std::string> mymap;

  mymap['a']="an element";
  mymap['b']="another element";
  mymap['c']=mymap['b'];

  std::cout << "mymap['a'] is " << mymap['a'] << '\n';
  std::cout << "mymap['b'] is " << mymap['b'] << '\n';
  std::cout << "mymap['c'] is " << mymap['c'] << '\n';
  std::cout << "mymap['d'] is " << mymap['d'] << '\n';

  std::cout << "mymap now contains " << mymap.size() << " elements.\n";

  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值