C++ set和map的用法

知识点小结

最近刚刚把算法中的排序部分刷完,由此觉得在实际的应用中应该不会每次都要手写排序,于是查到了一些关于容器的知识。这里先小结一下set和map。这两个容器属于关联容器,底层实现是红黑树,有点类似于java中的hashmap。set只有键,而map同时拥有键和值。同时,set和map这两个关联容器还有自己的函数,如insert和erase等。还是先从简单的部分理解,目前我的最大感受是,如果可以使用这种容器,那么排序的部分就不用再手写了,但是如果是非基础类型,比如说是一个结构体,那么就需要定义排序方式,或者说比较大小的比较器。

另外,对于容器,迭代器的概念非常的重要。我目前比较肤浅的理解是迭代器相当于一个指向容器内元素的指针,可以用*来返回迭代器指向的内容。对于结构体,迭代器后面也可以跟->。下面来看实例代码。还有许多其他的函数没有出现在例子当中,大家用到的时候查询即可。

#include 
#include  // 有关set的操作都包含在头文件中
#include  // 有关map 的操作都包含在头文件中

using namespace std;

int main()
{
  set n; // 可以把set看成某种数据类型,实际表示set里存放的是int类型的元素
  n.insert(1); // insert是set的函数,用于向set类型的容器n增加元素
  n.insert(3);
  n.insert(5);
  n.insert(2);
  n.insert(4);
  n.erase(3); // erase是set的函数,用于删除set类型的容器中的元素

  set :: iterator it; //这里it是set 的迭代器

  for(it=n.begin(); it!=n.end(); it++)
  //begin 和 end都是set的函数,分别指向第一个元素,和最后一个元素的后一位
    cout << *it << ' ';
    //这里可以将it看成指针,*it即为迭代器it指向的元素的具体值
  cout << endl;

  map student;
  //map的insert的函数需要明确输入的数据类型
  student.insert(pair ("Alice", 1));
  student["Bob"] =  2; //也可以使用数组进行初始化
  student.insert(pair ("Cary", 3));

  map :: iterator it2;

  for(it2 = student.begin(); it2 != student.end(); it2++)
    cout << it2 -> first << " " << it2 -> second << endl;
  it2 = student.find("Alice"); //注意it2是指向键值对的一个指针
  cout << it2 -> second << endl; //由于it2是指针,所以输出值时用second
  return 0;
}

 

你可能感兴趣的:(C++,C++)