容器map与set的增删查改

来源:互联网 发布:大学生艾滋病数据 编辑:程序博客网 时间:2024/06/04 18:54

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;}
原创粉丝点击