Map容器查找固定元素输出的三种方法


#include 
#include 
#include 


using namespace std;

int main()
{
    multimap<int, string> m1    
    {    
         {1,"a"}, 
         {1,"b"},
         {1,"c"},
         {1,"d"},
    };
    
    int search{1};
    auto m1_num = m1.count(search);
    auto iter = m1.find(search);
    cout << "m1_num的初始值为==" << m1_num << endl;
    while (m1_num)
    {
        cout << "m1_num的值为==" << m1_num<<"   "<<"iter的值为==="<< iter->first <<" " << iter->second << endl;
        iter++;
        m1_num--;
    }
}

输出:

m1_num的初始值为==4
m1_num的值为==4   iter的值为===1 a
m1_num的值为==3   iter的值为===1 b
m1_num的值为==2   iter的值为===1 c
m1_num的值为==1   iter的值为===1 d

利用count查找multimap容器中的重复元素,并输出,为了防止数组越界的问题,将count()函数的返回值作为循环条件,设计的十分巧妙。

同样的可以使用面向迭代器lower_bound和upper_bound的方法,原理同使用find,count函数相同.
代码如下;


#include 
#include 

using namespace std;

int main()
{
    multimap<int, string> m1    
    {    
         {1,"a"}, 
         {1,"b"},
         {1,"c"},
         {1,"d"},
    };
    

    int search{1};
    
    for (auto beg=m1.lower_bound(search),
              end=m1.upper_bound(search);
        beg!=end; ++beg
        )
    {
        cout << beg->second << endl;
    }
   
}

输出:

a
b
c
d

lower_bound返回第一个具有关键字元素的迭代器,upper_bound则返回指向最后一个具有关键字元素的迭代器,如果元素不在multimap中,则lower_bound和upper_bound迭代器会返回一个同样的位置,可以此用来判断迭代的条件。

equal_range函数

equal_range()函数,接受一个关键字,返回迭代器pair,如果存在则第一个迭代器指向第一个与关键字匹配的元素,第二个迭代器指向最后一个匹配元素之后的位置。若未能找到匹配元素,则i两个迭代器都指向关键字可以插入的位置。
本质上equal_range和lower_bound,upper_bound函数相同,不同的是equal_range函数返回一个pair。


#include 
#include 

using namespace std;

int main()
{
    multimap<int, string> m1    
    {    
         {1,"a"}, 
         {1,"b"},
         {1,"c"},
         {1,"d"},
    };
    

    int search{1};
   
    for (auto pos=m1.equal_range(1);
              pos.first!=pos.second;
              ++pos.first
        )
    {
        cout << pos.first->second << endl;
    }
   
  
}

输出:

a
b
c
d

你可能感兴趣的:(Map容器查找固定元素输出的三种方法)