第16周 范型程序补充之map用法





*Copyright(c) 2016.烟台大学计算机与控制工程学院
*ALL rights  reserved.
*文件名称:main.cpp
*作者:孙亚茹
*完成日期:2016年6月17日
*问题描述:阅读程序,体会结果。
*//

(1)

#include <algorithm>
#include<map>
#include<iterator>
#include<iostream>
#include<cstring>
using namespace std;
struct ltstr
{
    bool operator()(const char* s1, const char* s2) const
    {
        return strcmp(s1, s2) < 0;
    }
};

int main()
{
    map<const char*, int, ltstr> months;

    months["january"] = 31;
    months["february"] = 28;
    months["march"] = 31;
    months["april"] = 30;
    months["may"] = 31;
    months["june"] = 30;
    months["july"] = 31;
    months["august"] = 31;
    months["september"] = 30;
    months["october"] = 31;
    months["november"] = 30;
    months["december"] = 31;

    cout << "june -> " << months["june"] << endl;
    map<const char*, int, ltstr>::iterator cur  = months.find("june");
    map<const char*, int, ltstr>::iterator prev = cur;
    map<const char*, int, ltstr>::iterator next = cur;
    ++next;
    --prev;
    cout << "Previous (in alphabetical order) is " << (*prev).first << endl;
    cout << "Next (in alphabetical order) is " << (*next).first << endl;
    return 0;
}

(2)

#include <map>
#include <iostream>

using namespace std;


int main( )
{
    map <int, int> m1, m2, m3;
    map <int, int>::iterator m1_Iter;

    m1.insert ( pair <int, int>  ( 1, 10 ) );
    m1.insert ( pair <int, int>  ( 2, 20 ) );
    m1.insert ( pair <int, int>  ( 3, 30 ) );
    m2.insert ( pair <int, int>  ( 10, 100 ) );
    m2.insert ( pair <int, int>  ( 20, 200 ) );
    m3.insert ( pair <int, int>  ( 30, 300 ) );

    cout << "The original map m1 is:";
    for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
        cout << " " << m1_Iter->second;
    cout   << "." << endl;

    // This is the member function version of swap
    //m2 is said to be the argument map; m1 the target map
    m1.swap( m2 );

    cout << "After swapping with m2, map m1 is:";
    for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
        cout << " " << m1_Iter -> second;
    cout  << "." << endl;
    cout << "After swapping with m2, map m2 is:";
    for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
        cout << " " << m1_Iter -> second;
    cout  << "." << endl;
    // This is the specialized template version of swap
    swap( m1, m3 );

    cout << "After swapping with m3, map m1 is:";
    for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
        cout << " " << m1_Iter -> second;
    cout   << "." << endl;
    return 0;
}

(3)

#include <algorithm>
#include<map>
#include<iterator>
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    map<char,int> mymap;
    mymap['a']=10;
    mymap['b']=60;
    mymap['c']=30;
    mymap['d']=90;
    mymap['e']=50;

    map<char,int> second(mymap);
    map<char,int> third(mymap.begin(),mymap.end());
    map<char,int>::key_compare key_comp;
    map<char,int>::iterator it;
    it=mymap.begin();
    for (;it!=mymap.end();it++)
    {
        cout<<it->first<<":"<<it->second<<endl;
    }
    cout<<"================================="<<endl;
    second.clear();
    second['a']=1002;
    second['b']=10023;
    while (!second.empty())
    {
        cout << second.begin()->first << " => ";
        cout << second.begin()->second << endl;
        second.erase(second.begin());
    }
    cout<<"================================="<<endl;
    mymap.insert(pair<char,int>('f',100) );
    mymap.insert(pair<char,int>('g',200) );
    cout<<"f => " <<mymap.find('f')->second<<endl;
    cout<<"g => " <<mymap.find('g')->second<<endl;

    cout<<"================================="<<endl;
    key_comp=mymap.key_comp();
    cout << "mymap contains:\n";

    char highest=mymap.rbegin()->first;     // key value of last element

    it=mymap.begin();
    do {
        cout << (*it).first << " => " << (*it).second << endl;
    } while ( key_comp((*it++).first, highest) );

    cout << endl;
    return 0;
}


总结:

          map和multimap的区别和set和multiset的区别一样,都是带multi的可以有元素的重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值