PAT甲级 1002

不太了解使用c++的map,学习一下

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>

using namespace std;

int main(){

    // 输入 
    map<int, float> coefMap;

    //合并同类项 Each case occupies 2 lines, and each line contains the information of a polynomial
    for(int i = 0;i < 2;i++){
        int k;
        cin>>k;
        for(int j = 0; j < k; j++){
            int exp;
            float coef;
            cin>>exp>>coef;
            coefMap[exp] += coef;
            if(coefMap[exp] == 0){
                coefMap.erase(exp);
            }
        }
    }
    //输出结果
    cout<<coefMap.size();
    for (auto it = coefMap.rbegin(); it!=coefMap.rend(); ++it){
        cout << " "<<it->first<<" "<<fixed<<setprecision(1)<<it->second;
    }
    cout<<endl;
    return 0;
}

C++ map类

来源: https://blog.csdn.net/forever__1234/article/details/89647975

map是键-值对的组合,即map的元素是pair,其有以下的一些定义的方法:

map<k, v> m; : 定义了一个名为m的空的map对象
map<k, v> m2(m); : 创建了m的副本m2
map<k, v> m3(b, e); : 创建了map对象m3,并且存储迭代器b和e范围内的所有元素的副本

map元素访问

  • 下标 [ ] 访问 map[KEY]
  • at() 方法访问 map.at(KEY)

map插入方法

  1. 使用下标 []
  2. 使用 insert() 函数
    insert函数的插入方法主要有如下:
pair<iterator,bool> insert (const value_type& val);

插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败

iterator insert (const_iterator position, const value_type& val);

在指定位置插入,在不同位置插入效率是不一样的,因为涉及到重排

void insert (InputIterator first, InputIterator last);

插入迭代器范围内键值对

删除元素

size_t erase( const key_type& key );

根据key来进行删除, 返回删除的元素数量,在map里结果非0即1

iterator erase( iterator pos )

删除迭代器指向位置的键值对,并返回一个指向下一元素的迭代器

iterator erase( const_iterator first, const_iterator last );

删除一定范围内的元素,并返回一个指向下一元素的迭代器

查找关键字k出现的次数

size_type count (const key_type& k) const;

查找元素

iterator find (const key_type& k);
const_iterator find (const key_type& k) const;
//若存在,返回指向该key的迭代器
//若不存在,则返回迭代器的尾指针,即 mymap.end(),即 -1

lower_bound(k) 返回关键字>=k的元素的第一个位置(是一个迭代器) | upper_bound(k) 返回关键字>k的元素的第一个位置

iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;
// 不适用于无序容器

equal_range() 返回一个迭代器pair,表示关键字 == k的元素的范围。

若k不存在,pair的两个成员均等于c.end()

map.empty() 判断是否为空

map.clear() 清空

map.size() 容器大小

map.max_size() 最大元素个数

mapA.swap(mapB) 交换两个map

map.begin(), map.end() 返回头部,尾部的迭代器

map.rbegin() 返回一个指向map尾部的逆向迭代器

map.rend() 返回一个指向map头部的逆向迭代器

比较key的值

key_compare key_comp() const;

value_comp() 比较value_type值大小

map的遍历

迭代器

    map<string, size_t>::iterator iter;
    for (iter = word_count.begin(); iter != word_count.end(); iter++) {
        cout << iter->first << " occurs " << iter->second
             << ((iter->second) > 1 ? " times" : " time") << endl;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值