C++STLmap-创新互联
这里写目录标题
find()用法
erase()用法
swap()用法
lower_bound()和upper_bound()用法
4.map的第三个参数—————仿函数
标题名称:C++STLmap-创新互联
当前链接:http://pwwzsj.com/article/cssdje.html
- 1.map介绍
- 2.map的方法
- find()用法
- erase()用法
- map的添加元素
- swap()用法
- lower_bound()和upper_bound()用法
- 3.访问map
- 4.map的第三个参数—————仿函数
1.map中的所有元素都是pair,pair中第一个元素为key(键值),起到了索引的作用,第二个元素为value(实值),所有元素都会根据元素的键值按照一定的准则进行排序
2.Map,也叫关联数组,提供key/value(键/值对),key用来索引,value是被存储和检索的数据。
3.Map的内部数据结构是红黑树。
2.map的方法方法 | 含义 |
---|---|
mp.find(key) | 返回键为key的映射的迭代器 O(logN) 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回mp.end() |
mp.erase(it) | 删除迭代器对应的键值O(1) |
mp.erase(key) | 根据映射的键删除键和值 O(logN) |
mp.erase(first,last) | 删除左闭右开区间迭代器对应的键和值 O(last-first) |
mp.size() | 返回映射的对数 O(1) |
mp.clear() | 清空map中的所有元素 O(N) |
mp.insert() | 插入元素,插入时要构造键值对 |
mp.empty() | 如果map为空,返回true,否则返回false |
mp.begin() | 返回指向map第一个元素的迭代器(地址) |
mp.end() | 返回指向map尾部的迭代器(最后一个元素的下一个地址) |
mp.rbegin() | 返回指向map最后一个元素的迭代器(地址) |
mp.rend() | 返回指向map第一个元素前面(上一个)的逆向迭代器(地址) |
mp.count(key) | 查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0 |
mp.lower_bound() | 返回一个迭代器,指向键值>= key的第一个元素 |
mp.upper_bound() | 返回一个迭代器,指向键值>key的第一个元素 |
mapm;
map::iterator iter;
m["apple"] = 4.5f;
m["orangle"] = 7.0f;
iter = m.find("apple");
cout<< iter->first<< " "<< iter->second<< endl;
erase()用法
m["apple"] = 4.5f;
m["orangle"] = 7.0f;
m.erase("apple");
m.erase(m.begin(), --m.end());//和上面功能一样
---------------------------------------------------------------------------------------------------------------------------------------
map的添加元素方法 一:直接赋值
m["apple"] = 4.5f;
m["orangle"] = 7.0f;
方法二:insert()+pair
mm.insert(pair(1, 11));
mm.insert(pair(4, 44));
mm.insert(pair(2, 22));
方法三:利用另一个map对象直接赋值
mapmp(mm);
方法四:value_type()+insert()
mp.insert(map::value_type(5, 55));
方法五:make_pair()
mm.insert(make_pair(0, 00));
swap()用法
mm.swap(mp);
lower_bound()和upper_bound()用法
mp.lower_bound : 返回的是第一个大于、等于key的iterator,如果没有则返回空。
mp.upper_bound :返回的是第一个大于key的iterator,如果没有,则返回空
3.访问map方法 一:迭代器访问
map::iterator iter;
for(iter = mp.begin(); iter != mp.end(); iter++)
{// 键 值
// iter是结构体指针访问所以要用 ->访问
cout<< it->first<< " "<< it->second<< "\n";
//*iter是结构体变量 访问要用 . 访问
//cout<<(*iter).first<<" "<<(*iter).second;
}
方法二:auto指针访问
for(auto i : mp)
cout<< i.first<< " "<< i.second<< endl;//键,值
方法三:利用find()对单个键值进行访问
map::iterator it = mp.find('a');
cout<< it ->first<< " "<< it->second<< "\n";
4.map的第三个参数—————仿函数
定义格式:
mapmc;
CMP代码:
实际对“()”进行运算符重载,写了一个从大到小的排序。
class CMP
{public:
bool operator()(int a, int b)const
{return a >b;
}
};
mapmc;
mc.insert(make_pair(3, 33));
mc.insert(pair(0, 00));
mc.insert(map::value_type(1, 11));
mc[4] = 44;
map::iterator iter;
for (iter = mc.begin(); iter != mc.end(); iter++)
cout<< iter->first<< " "<< iter->second<< endl;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:C++STLmap-创新互联
当前链接:http://pwwzsj.com/article/cssdje.html