POJ2503 STL map用法

2017-08-21 15:42:01 

writer:pprp

除了用到map以外,输入也是一个问题

用到了sscanf详情请看上一篇博客

/*
theme:第一章 - 分治算法
name: POJ 2503
writer:pprp
description:详情请见poj 2503
date:Monday 2017/8/21
*/

#include <bits/stdc++.h>

using namespace std;

map<string, string> mp;

char ch1[20], ch2[20], ch3[40], tmpch[20];
int main()
{
    while(gets(ch3))
    {
        if(strlen(ch3) == 0)
            break;
        sscanf(ch3,"%s %s",ch1,ch2);
        mp.insert(make_pair(ch2,ch1));
    }


//    map<string,string> ::iterator ii;
//    for(ii = mp.begin(); ii != mp.end() ; ii++)
//    {
//        cout << ii->first << "  " << ii->second << endl;
//    }


    while(gets(tmpch))
    {
        bool tag = 0;
        map<string, string> :: iterator it;
        it = mp.find(tmpch);
        if(it != mp.end())
        {
            cout << mp[tmpch] << endl;
        }
        else
        {
            cout << "eh" << endl;
        }
    }




    return 0;
}

 之前我写的错误的代码:

插入以后遍历,发现只读出最后一个

map<key,value>mp

key不建议是char*指针,

map内部是一个红黑树,

比较key的时候比较的是char*一个地址,而不是他指向的字符串

所以要这样用

struct ptrCmp
{
    bool operator()( const char * s1, const char * s2 ) const
    {
        return strcmp( s1, s2 ) < 0;
    }
};

map<const char*,const char*,ptrCmp> mp;

我测试了一下,没有用好,希望有大佬能给我展示可以用的代码;

posted @ 2017-08-21 15:44  pprp  阅读(261)  评论(0编辑  收藏  举报