C++ STL Map

源文件

#include <iostream>
#include <string>
#include <map>
#include <utility>
#include <algorithm>

using namespace std;
/**
 * 前述:
 * 1.map存储的都是pair对象,键值各自可以是任何类型,通常大多数是string;
 * 2.map会默认或按指定规则排序;
 * 3.map中键的值被const修饰,既不能重复也不能修改;
 * 4.模版声明:
 * template < class Key,                                     // 指定键(key)的类型
           class T,                                       // 指定值(value)的类型
           class Compare = less<Key>,                     // 指定排序规则
           class Alloc = allocator<pair<const Key,T> >    // 指定分配器对象的类型
           > class map;
map 容器模板有 4 个参数,其中后 2 个参数都设有默认值。大多数场景中,我们只需要设定前 2 个参数的值,有些场景可能会用到第 3 个参数,
但最后一个参数几乎不会用到。
*/

/**
 * 基础1.创建map
*/
void createMap(){
    //way1
    map<string,string> m0 ;
    map<string,string> m1 {
  {"name","tony"},{"age","20"}};
    // map<string,string> m1 {make_pair("name","tony"),make_pair("age","20")};
    //way2
    map<string,string> m2(m1);
    // //way3 C++ 11
    // //创建一个会返回临时 map 对象的函数
    // map<string,int> disMap(){
    //     std::map<std::string, int>tempMap{ {"C语言教程",10},{"STL教程",20} };
    //     return tempMap;
    // }
    // //调用 map 类模板的移动构造函数创建 newMap 容器
    // std::map<std::string, int> m3(disMap());
    //way4
    map<string, int>m5{ {"C语言教程",10},{"STL教程",20} };
    map<string, int>newMap(++m5.begin(), m5.end());
    //way5 创建容器同时制定排序规则
    std::map<std::string, int> m4{ {"C语言教程",10},{"STL教程",20} };
    std::map<std::string, int, std::less<std::string> > m4a{ {"C语言教程",10},{"STL教程",20} };
    //修改排序规则
    std::map<std::string, int, std::greater<std::string> > m4b{ {"C语言教程",10},{"STL教程",20} };

}
/**
 * map成员方法:
 * 表 1 C++ map容器常用成员方法
成员方法	功能
begin()	返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
end()	返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
rbegin()	返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
rend()	返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
cbegin()	和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。
cend()	和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。
crbegin()	和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。
crend()	和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。
find(key)	在 map 容器中查找键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
lower_bound(key)	返回一个指向当前 map 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
upper_bound(key)	返回一个指向当前 map 容器中第一个大于 key 的键值对的迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
equal_range(key)	该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.secon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STL中的map是一个非常有用的容器,它提供了一种关联数组的方式,可以将任意类型的数据关联起来。map底层使用红黑树实现,因此查找和插入操作的时间复杂度为O(logn)。 在使用map时,需要定义一个键和值的类型。键必须是可比较的类型,并且支持小于操作符。例如可以使用字符串作为键,而值可以是任意类型的数据。通过[]操作符可以访问每个键-值对,也可以使用迭代器遍历map中的所有数据。 map还提供了许多其他的方法,包括插入、查找、删除、遍历、清空等。此外,map还具有自动排序的功能,键-值对按照键的大小自动排序。当需要按照键进行排序时,使用map将非常方便。 总的来说,STL中的map可以提供一种快速、方便、可靠的方法将数据关联起来,特别适合对数据进行查找和排序。借助于map的丰富功能,能够提高程序的效率和性能。 ### 回答2: STL mapC++ STL 中的一种容器,它是一个关联容器,它以键对值的方式存储数据。STL map 中的元素是按照其键的大小排列的,通常使用红黑树这样的自平衡二叉搜索树来实现其底层存储结构。因此,它支持快速插入、删除和查找操作。 STL map 中的键和值都可以是任何可比较的类型,如整数、浮点数、字符串、对象等。在 map 中,键是唯一的,每个键只能对应一个值。如果插入相同的键,则会替换已有键对应的值。 STL map 的基本操作有插入、删除和查找操作。插入操作可以使用 insert() 函数或者中括号符[],例如: ```c++ #include <map> #include <iostream> using namespace std; int main() { map<string, int> scores; // 方式一:使用 insert() scores.insert(make_pair("Tom", 90)); // 方式二:使用中括号符[] scores["Jerry"] = 80; // 输出 scores 中的所有元素 for (map<string, int>::iterator it = scores.begin(); it != scores.end(); ++it) { cout << it->first << ": " << it->second << endl; } return 0; } ``` 删除操作可以使用 erase() 函数,例如: ```c++ scores.erase("Tom"); ``` 查找操作可以使用 find() 函数,例如: ```c++ map<string, int>::iterator it = scores.find("Jerry"); if (it != scores.end()) { cout << "Jerry's score is " << it->second << endl; } else { cout << "Jerry is not in the scores map" << endl; } ``` 此外,还有其他常用操作,如:判断 map 是否为空、获取 map 的大小等。STL map 还支持迭代器等高级操作。 综上所述,STL map 是一种很常用的 C++ STL 容器,它提供了一种便捷的存储和管理键值对的方法,可以快速实现查找、添加、删除等操作。对于大多数场景,STL map 都是一个非常不错的选择。 ### 回答3: STL MapC++中非常重要的一个容器。map本质上是一颗红黑树,可以自动排序,支持基于关键字的快速查找。其中关键字和值可以是任何可比较类型。 由于它是一颗红黑树,因此每个元素在树中的位置是由关键字决定的。这个特性使得查找、操作和插入元素都非常高效。此外,map还支持基于关键字的范围查找和删除。 使用map时需要注意,操作map时会产生额外的开销,因此在大量操作时,可能需要考虑使用其他容器。 另外,map的实现具有高度的迭代器稳定性,这意味着一旦某个元素被插入或删除,对其他元素的迭代器不会受到影响。这也使得map非常适合在需要基于关键字进行高效访问的情况下维护数据。 总之,STL MapC++标准库提供的一个非常方便的容器,可以快速实现基于关键字的查找和排序。在实际应用中,需要根据具体场景选择合适的容器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值