容器map与set的增删查改

set的特性是所有元素都会根据元素的键值自动被排序。set的键值就是实值,set不允许两个元素有相同的键值。
标准的STL即以RBTree作为底层机制。
容器map与set的增删查改_第1张图片
下面我做一个简单的sret测试

//#include
//#include"RBTree.h"
//#include
//int main()
//{
//  TestRBTree();
//  system("pause");
//}
#include
#include
#include
using namespace std;
int main()
{
    int i;
    int ia[6] = {0,1,2,3,4,5};
    set<int> iset(ia, ia+6);
    cout<<"size="<cout<<"3 count="<3)<3);
    cout<<"size="<1);
    cout<<"size="<cout<<"1 count="<1)<set<int>::iterator ite1=iset.begin();
    set<int>::iterator ite2=iset.end();
    for(; ite1 != ite2; ++ite1)
    {
        cout<< *ite1;
        cout<3);
    if(ite1 != iset.end())
    {
        cout<<"3 found" <1);
    if(ite1 == iset.end())
    {
        cout<<"1 not found"<//通过迭代器来修改set元素,是不能通过的
    //*ite1 = 8;
    system("pause");
}

容器map与set的增删查改_第2张图片
map的特性是所有元素都会根据元素键值自动排序。map的所有元素都是pair,同时拥有value和key。map也不允许两个元素拥有相同的键值。
容器map与set的增删查改_第3张图片
pair的定义

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

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

// accessing mapped values
#include 
#include 
#include 

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;
}

你可能感兴趣的:(数据结构)