• map定义类型
/*
1. map对象的元素是键值对,也就是每个元素包含两个部分:键以及由键关联的值。
键的类型必须是可以比较的,但键类型是自定义类型时,必须重写比较函数:
inline bool compare(const keytype &key,const keytype &key)
2. map对象的键是不可修改的,值可以;用map迭代器进行解引用将产生pair类型的对象,
实际上,迭代器是一个指向pair的引用
*/
map<string ,int > test1;
test1["hello"] = 1;
test1["world"] = 2;
map<string, int>::iterator it1 = test1.begin();
map<string, int>::iterator it2 = test1.end();
/*
创建test3,test3中存储迭代器it1,到it3之间的所有元素副本。
*/
map<string, int>test3(it1,it2);
map<string, int>::iterator it3 = test3.begin();
while (it3 != test3.end())
{
/*map对象的值域是可以修改的*/
it3->second = 3;
cout << it3->first << ", " << it3->second << endl;
it3++;
}
• map添加元素
/**
* 1. 使用下标访问map对象
* 首先,将键“feigo”及一个默认初始化的值作为一个新键值对插入到test4中。
* 然后,读取新插入的元素,并将它的值赋值为4;
* 若test4中已经存在该元素,则将该元素值赋值为4.
*/
map<string , int > test4;
test4["feigo"] = 4;
/**
* 2. map::insert的使用
*/
/**
* • m.insert(e) e是一个m上的value_type类型的值。如果e.first不在m中,则插入e,否则,则保持m不变。
* 该函数返回一个pair类型对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示 是否插入该元素
*/
map<string , int > test5;
test5.insert(make_pair("Anna", 5)); // 也可以test5.insert(map<string, int>::value_type("Anna", 5));
pair< map<string , int >::iterator, bool> resul = test5.insert(make_pair("Anna", 5));
map<string , int >::iterator it = resul.first;
bool isInsert = resul.second;
/**
* • m.insert(beg,end) beg,end是某个map对象的迭代器;对于从beg,到end范围内的所有元素,如果它的键在m中不存在,则
* 插入到m中。
*/
test5.insert(it1,it2);
map<string, int>::iterator it5 = test5.begin();
while (it5 != test5.end())
{
cout << it5->first << ", " << it5->second << endl;
it5++;
}
/**
* • m.insert(iter, e) e是一个中m上的value_type类型值。如果键(e.first)不在m中,则创建新元素,并以迭代器iter为起点
* 搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键的元素。
*/
map<string,int>::iterator it6 = test5.begin();
map<string,int>::iterator it7 = test5.insert(it6,make_pair("Anna", 5));
cout << "anna : " << it7->first << ", " << it7->second << endl;
/*
* 3. 查找并读取map中的元素
*/
/*
* • m.count(k) 返回m中k的出现次数,对于map对象,其返回值只能是0或者1.
* 如果返回值非0,则可以使用下标操作符来获取该键所关联的值,而不用担心这样做会中map中插入新元素
*/
if(test5.count("Anna"))
{
cout << test5["Anna"] << endl;
}
/*
* • m.find(k) 如果m容器中存在按k键索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器。
* 和count相比,find只查找了一次,而count查找了两次
*/
map<string,int>::iterator it8 = test5.find("Anna");
if(it8 != test5.end())
{
cout << it8->second << endl;
}
/*
* 4. 从map对象中删除元素
*/
/*
* • m.erase(k) 删除m中键为k的元素。返回size_type类型的值,表示删除的元素个数。非0即1,不解释。
*/
if (test5.erase("Anna"))
{
it8 = test5.begin();
while (it8 != test5.end())
{
cout << it8->first << ", " << it8->second << endl;
it8++;
}
}
/*
* • m.erase(p) 删除m中迭代器所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end()。否则程序中运行时出错。
*/
map<string,int>::iterator it9 = test5.find("Anna");
test5.erase(it9); //运行至此挂了
it9 = test5.begin();
while (it9 != test5.end())
{
cout << it9->first << ", " << it9->second << endl;
it9++;
}
/*
* • m.erase(b,e) 删除m中迭代器b,e之间的元素。b,e必须标示m中的一段有效范围。不然:运行时挂!
*/
map<string,int>::iterator it10 = test5.begin();
map<string,int>::iterator it11 = test5.end();
test5.erase(it10,it11);
cout << endl;
while (it10 != test5.end())
{
cout << it10->first << ", " << it10->second << endl;
it10++;
}
分享到:
相关推荐
C++ Map 详解 C++ 的 STL 中提供了一个非常有用的容器类,即 map,它是一种关联容器,可以提供一对一的数据处理能力。Map 的特性是每个关键字只能在容器中出现一次,而每个关键字对应一个值。这种特性使得 map 在...
C++中的`map`是一个关联容器,它存储键值对(key-value pairs),其中每个键都是唯一的。`map`在内部实现为红黑树(Red-Black Tree),保证了其插入、查找和删除操作的时间复杂度为O(log n)。在C++标准库中,`map`...
### hash_map详解 #### 0. 为什么需要hash_map? 在软件开发中,经常会遇到需要高效存储和查找键值对(key-value)的情况。例如,在管理人物名称及其相关信息时,我们希望能够快速地添加、查找和更新数据。传统的...
C++ 中 Map 的基本操作和使用 Map 是 C++ 中的一个标准容器,它提供了一对一的关系,在一些程序中建立一个 Map 可以起到事半功倍的效果。下面总结了一些 Map 的基本操作和使用。 Map 简介 Map 是一种关联式容器。...
此外,书中还会详细讨论STL(Standard Template Library,标准模板库),这是C++中的一组高效、泛型的容器(如vector、list和map)、算法和迭代器。STL的使用极大地提高了代码的复用性和效率,是现代C++编程不可或缺...
STL(Standard Template Library,...熟练掌握`map`的用法,能极大地提升C++编程的效率和代码质量。通过了解插入、查找、更新、删除等基本操作以及遍历和查找辅助函数,开发者可以充分利用`map`的特性来解决实际问题。
C++STL详解 C++STL 库是 C++ 语言中非常重要的一部分,它提供了许多有用的容器、算法和迭代器,帮助开发者更方便地编写高效、可重用的代码。 泛型程序设计是 C++ 语言中非常重要的一部分,它允许开发者编写通用的...
由于直接提供给定文件的具体内容是不可能的,我将基于文件标题“C++语言命令详解”和标签“C++”,根据我的知识库生成一个详细的知识点说明,以符合您的要求。 C++是一种由Bjarne Stroustrup于1980年代初期在贝尔...
通过理解这些基本概念和操作,你可以有效地在C++项目中利用`map`容器来管理和操作数据。结合模板知识,`map`能帮助你构建更高效、更灵活的代码。在实践中,根据具体需求选择`map`或`unordered_map`,并充分利用其...
《Think in C++编程详解》是一本旨在帮助读者从初级水平逐步提升至高阶的C++编程指南。这本书深入浅出地介绍了C++语言的核心概念和技术,结合作者多年的编程实践经验,为学习者提供了丰富的知识与实用技巧。 首先,...
C++的学习资源详解将涵盖以下几个关键知识点: 1. **基础语法**:C++的基础包括数据类型(如int, float, char等)、变量声明、运算符、流程控制(如if语句、for循环、while循环)以及函数的使用。理解这些基本概念...
STL(Standard Template ...通过理解并熟练运用这些知识点,开发者可以在C++项目中有效地利用map来管理和操作数据。记住,map的效率得益于其内部的红黑树实现,可以保证插入、查找和删除操作的时间复杂度为O(log n)。
C++实际开发的过程会经常使用到map。map是一个key-value值对,key唯一,可以用find进行快速的查找。其时间复杂度为O(logN),如果采用for循环进行遍历数据时间复杂度为O(N)。如果map中的数据量比较少时,采用find和...
7. **STL**:标准模板库包括容器(如vector、list、map等)、算法和迭代器,极大地丰富了C++的功能,降低了编程复杂性。 在《C++实例详解》中,每个主题都会通过详细的步骤和注释解释,引导读者逐步实现并理解代码...
大家都知道map容器是C++ STL中的重要一员,平时会遇到删除map容器中value为指定元素的问题,例如删除所有字符串为”123″或者能整除3的元素。 一、map容器下的方法说明 由于map容器下的方法较多,这里只列举代码中用...
在C++编程语言中,STL(Standard ...了解并熟练运用这些知识点,能够帮助开发者更好地利用C++的`map`容器,提高代码效率和可读性。在实际编程中,根据具体需求选择合适的数据结构和操作,是提升程序性能的关键。
《Visual C++精彩实例详解》随书光盘包含了大量的学习资源,旨在帮助读者深入理解和熟练掌握Visual C++编程技术。这本书籍的光盘内容可能涵盖了从基础到高级的各种实例,覆盖了C++语言的核心概念、MFC(Microsoft ...