不太了解使用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插入方法
- 使用下标 []
- 使用 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;
}