C++里map/multimap部分API总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++里map/multimap部分API总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5418字,纯文字阅读大概需要8分钟。
内容图文
1.map容器是一种关联式容器,在插入数据时会根据键值进行排序插入。
2.map容器的每一个元素都是对组,pair<key, value>,其中第一个key为键值,第二个value为实值。
3.键值不可以修改,实值可以修改,可以使用at(key)来访问实值.
4.map的迭代器不支持随机访问。
5.map的键值不允许重复,而multimap的键值可以重复.
#include<iostream>
#include<map>
using namespace std;
//map容器:1,所有元素都是对组pair<key, value> ,pair的第一个元素被视为键值,第二个元素被视为实值。
//2.map容器为关联式容器,不允许两个元素有相同的键值,通过键值自动进行排序,可以使用at(key)来访问实值
//3.其键值不可以改变,因为会破坏map组织,可能会是容器变成无序序列,但是其实值是可以改变的
//4.其迭代器不支持随机访问
//multimap的键值可以重复
//初始化,插入
void test_one() {
map<int, double> m;
//第一种插入接口:insert(pair),插入对组,返回值是一个对组
m.insert(pair<int, double>(-1, 25)); //第一种插入方式
m.insert(make_pair(3, 90)); //第二种插入方式:推荐使用
m.insert(map<int, int>::value_type(2, 22)); //第三种
m[7] = 88; //第四种:简单但不推荐,可以用于访问已经存在的数据
for (map<int, double>::iterator it = m.begin(); it != m.end(); it++)
cout << "key: " << it->first << " value: " << (*it).second << endl;
cout << "\n";
//第二种接口:insert(pos,pair),在pos的后面插入pair,这里的后面不一定是pos的下一个位置,是根据键值来排序之后插入到合适的位置,返回值是指向这个元素的迭代器
map<int, double>::iterator insert_it = m.insert(m.begin(), make_pair(8, 100));
cout << insert_it->first << " " << insert_it->second << endl;
for (map<int, double>::iterator it = m.begin(); it != m.end(); it++)
cout << "key: " << it->first << " value: " << (*it).second << endl;
cout << "\n";
//第三种接口:insert(start,end),将[start,end)内的所有元素插入
map<int, double> m2;
m2.insert(m.begin(), m.end());
for (map<int, double>::iterator it = m2.begin(); it != m2.end(); it++)
cout << "key:" << it->first << " value:" << it->second << endl;
if (m.empty())
cout << "map is empty" << endl;
else
cout << "size : " << m.size() << endl;
}
//删除
void test_two()
{
map<int, string> m;
m.insert(make_pair(0, "孔子"));
m.insert(make_pair(1, "老子"));
m.insert(pair<int, string>(2, "韩非子"));
m.insert(map<int, string>::value_type(3, "荀子"));
for (map<int, string>::iterator it = m.begin(); it != m.end(); it++)
cout << "key :" << it->first << " value :" << it->second << endl;
cout << endl;
//cout << m.at(3) << endl; //map的at根据键值查找实值
//erase删除接口1:erase(pos),删除迭代器位置的对组
m.erase(m.begin());
for (map<int, string>::iterator it = m.begin(); it != m.end(); it++)
cout << "key :" << it->first << " value :" << it->second << endl;
cout << endl;
//接口2:erase(key):删除map容器中键值与key值相同的的对组
m.erase(2);
for (map<int, string>::iterator it = m.begin(); it != m.end(); it++)
cout << "key :" << it->first << " value :" << it->second << endl;
cout << endl;
//接口3:erase(begin,end) ,删除区间[begin,end)内的所有对组
m.erase(m.begin(), m.end());
if (m.empty())
cout << "map empty" << endl;
}
//查找
void test_three() {
map<int, string> m;
m.insert(make_pair(0, "孔子"));
m.insert(make_pair(1, "老子"));
m.insert(make_pair(2, "庄子"));
//find(key),查找容器里是否有键值为key的元素对组,若存在返回该键值对应的迭代器,不存在返回map.end()
map<int, string>::iterator pos = m.find(1);
if (pos != m.end())
cout << "find success, key: " << pos->first << " value: " << pos->second << endl;
else cout << "no find\n";
//count(key),统计容器里键值为key的对组有多少个,对于map来说只有0或1,multimap可以大于1
int m_count = m.count(2);
cout << m_count << endl;
//lower_bound(key) 查找容器对组中第一个键值大于等于key的对组,查找成功返回该键值对应的迭代器,失败返回map.end()
map<int, string>::iterator lower_pos = m.lower_bound(0);
if (lower_pos != m.end())
cout << "找到第一个键值大于等于0的对组,key: " << lower_pos->first << " value: " << lower_pos->second << endl;
else cout << "没有键值大于等于0的对组\n";
//upper_bound(key) 查找容器对组中第一个键值大于key的对组,查找成功返回该键值对应的迭代器,失败返回map.end()
map<int, string>::iterator upper_pos = m.upper_bound(0);
if (upper_pos != m.end())
cout << "找到第一个键值大于0的对组, key: " << upper_pos->first << " value: " << upper_pos->second << endl;
else cout << "没有键值大于0的对组\n";
cout << "\n";
//equal_range(key), 查找第一个大于等于key的对组作为下限,查找第一个大于key的对组作为上限,返回值为一个对组,对组第一个元素为下限的迭代器,第二个为上限的迭代器,失败返回map.end()
pair<map<int, string>::iterator, map<int, string>::iterator> range = m.equal_range(0);
if (range.first != m.end())
cout << "找到第一个键值大于等于0的对组,key: " << range.first->first << " value: " << range.first->second << endl;
else cout << "没有键值大于等于0的对组\n";
if (range.second != m.end())
cout << "找到第一个键值大于0的对组, key: " << range.second->first << " value: " << range.second->second << endl;
else cout << "没有键值大于0的对组\n";
}
//指定容器中对组的排序规则,默认为升序排序,可以使用仿函数实现降序排序
class myCompare
{
public:
//重载()实现自定义排序规则
bool operator() (int a, int b) const {
return a > b;
}
};
void test_four() {
map<int, int, myCompare> m;
m.insert(make_pair(2, 90));
m.insert(make_pair(4, 90));
m.insert(make_pair(0, 90));
for (map<int, int, myCompare>::iterator it = m.begin(); it != m.end(); it++)
cout << "key :" << it->first << " value :" << it->second << endl;
cout << endl;
}
int main()
{
//test_one();
//test_two();
//test_three();
test_four();
cin.get();
return 0;
}
内容总结
以上是互联网集市为您收集整理的C++里map/multimap部分API总结全部内容,希望文章能够帮你解决C++里map/multimap部分API总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。