pair,map,set<<0924

生成pair类型对象的三种方法

pair<string, int> word;
word.first = "hello";
word.second = 12;

pair<string, int> word2("world", 13);

pair<string, int> word3;
word3 = make_pair<string, int>("foo", 15);

map

  • map为一个容器,里面是有序的pair对象,其中的元素可以用迭代器遍历,也可以使用for (pair<> &p : m)来遍历;

  • map的插入和查询和插入都可以直接使用下标,但使用下标来查询极不安全,因为当下标表达式一写出来,若没有这个key值,会自动插入一个value为0 的pair对象,使用下标插入的时候,也无法获知是否已存在这个key值

  • 利用上面的那个特性,在统计词频的时候,直接使用

      while(cin -> word)
      	words[word] ++;
    

    就OK。

  • 为了解决上面的问题,可以使用m.insert(make_pair())函数来解决插入的问题,它返回一个pair对象ret,其中ret.second在key值已经存在的情况下,会返回false,ret.first保存这个key值得迭代器,相反,若key不存在,会插入这个pair,first为m.end(),secend为ture

  • m.count(key)函数返回key值出现的次数,若key存在则返回1,否则返回0

  • m.find(key)返回找到key值得迭代器,或者m.end();

set

  • set<> s;使用s.insert()来插入元素,自动排序
  • s.find(key);实现查询返回该key的迭代器

map和set比较:

  • 二者均使用红黑树实现
  • key需要支持<操作
  • map侧重于key-value的快速查找
  • set侧重于查看元素是否存在
  • map和set中的元素无法排序。
原文地址:https://www.cnblogs.com/sunstars/p/3991890.html