单独的数字 --计蒜客

此题连接
话不多说上代码:

#include <iostream>
#include <map>
#include <iterator>
using namespace std;
int main()
{
    int n;
    map<int,int> m;
    map<int,int>::iterator it;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int key;
        cin>>key;
        m[key]++;
    }

    for(it=m.begin();it!=m.end();it++)
        if(it->second==1)
        {
            cout<<it->first<<endl;
            return 0;
        }
}

其实本题并不难。我一开始想到用数组去索引,但是数组不能开那么大且Key值要大于零;
再后来学到了一点关于异或的性质,又反过来做这题发现还是然并*;
此题用map来解再合适不过了。这里引出map的用法:
map 包含在头文件 #include < map >里面
注:以下的pair 也在此头文件中
初始化:三种方法 (以int string为例)

map<int,string> m;
pair<int,string>
m.insert(pair<int,string>(1,"tom"));
m.insert(map<int,string>::value_type(2,"jone");
m[3]="jike";

insert初始化函数不会进行覆盖,用数组会对原先的值进行覆盖;
另外

map <int,sting> m;
map <int,string>::iterator it;
m.end();//这个不多讲迭代器
m.begin();
m.rbegin();//反向遍历用的到。。。关键要知道有这个用法
m.rend();
it=m.bigin();
it->first;//Key值
it->second;//key对应的数值

本题涉及map的用法就这些
更多请点击

猜你喜欢

转载自blog.csdn.net/a1226860296b/article/details/82526847