zoukankan      html  css  js  c++  java
  • STL库中的equal_range()

    equal_range根据键值,返回一对迭代器的pair对象。如果该键值在容器中存在,则pair对象中的第一个迭代器指向该键关联的第一个实例,第二个迭代器指向该键关联的最后一个实例的下一位置。如果找不到匹配的元素,则pair对象中的两个迭代器都将指向此键应该插入的位置。总之,equal_range返回迭代器位置区间 [ lower_bound, upper_bound ) 。见以下例子:

    #include <iostream>
    #include <map>
    int main ()
    {
      std::multimap<char,int> my_multimap;
      my_multimap.insert(std::make_pair('a',10));
      my_multimap.insert(std::make_pair('a',20));
      my_multimap.insert(std::make_pair('a',30));
      my_multimap.insert(std::make_pair('a',40));
      my_multimap.insert(std::make_pair('b',10));
      my_multimap.insert(std::make_pair('c',10));
      my_multimap.insert(std::make_pair('c',20));
      std::cout << my_multimap.size() << std::endl;
      std::pair<std::multimap<char,int>::iterator,std::multimap<char,int>::iterator> ret;
      ret=my_multimap.equal_range('a');
      for(std::multimap<char,int>::iterator it=ret.first;it !=ret.second;it++){
            std::cout << it->first << " => " << it->second << '
    ';
      }
      return 0;
    }

    输出:

    7
    a => 10
    a => 20
    a => 30
    a => 40

    从上面例子可以看出,使用了multimap是可以存储重复的键值的,所以使用equal_range开始找'a'键,发现满足条件的有4个,这时返回2个迭代器,第一个迭代器是'a':10这一组键值对,第二个迭代器是最后一个'a':40这组满足条件的键值对的后一个键值对'b':10。因此迭代打印时就会得到一堆输出。

    如果没有找到满足条件的键值,那么就会返回最应该插入的位置,这时第一个迭代器和第二个迭代器是相等的。
    如果是用map,那么键唯一,也就是将上述代码中的multimap被替换为map,这时下面代码所得到的结果就是'a'键对应的值10。

    #include <iostream>
    #include <map>
    int main ()
    {
      std::map<char,int> my_map;
      my_map.insert(std::make_pair('a',10));
      my_map.insert(std::make_pair('a',20));
      my_map.insert(std::make_pair('a',30));
      my_map.insert(std::make_pair('a',40));
      my_map.insert(std::make_pair('b',10));
      my_map.insert(std::make_pair('c',10));
      my_map.insert(std::make_pair('c',20));
      std::cout << my_map.size() << std::endl;
      std::pair<std::map<char,int>::iterator,std::map<char,int>::iterator> ret;
      ret=my_map.equal_range('a');
      for(std::map<char,int>::iterator it=ret.first;it !=ret.second;it++){
            std::cout << it->first << " => " << it->second << '
    ';
      }
      return 0;
    }

    输出:

    3
    a => 10
  • 相关阅读:
    公安备案接入服务商如何填写?(网站接入信息)
    VSCode 开发Vue必备插件
    阿里云ecs从零配置centos 安装宝塔bt环境 (安装失败提示setuptools installation failed)
    hover时下划线从中间向两端渐变
    phpcms v9后台增加阅读量字段,可任意修改阅读量
    织梦登录后台变空白解决方法大全
    html鼠标滚动后导航栏吸顶效果
    关于height:100%和height:100vh的区别
    mycat
    Hash碰撞
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11392475.html
Copyright © 2011-2022 走看看