C++ map使用
1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 2、map的功能 自动建立Key - value的对应。key 和 value可以是任意你需要的类型。 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。 快速插入Key - Value 记录。 快速删除记录 根据Key 修改value记录。 遍历所有记录。 C++中的`map`是一种关联式容器,它提供了一种基于键值对(Key-Value Pair)的数据存储方式。在C++标准库中,`map`位于`<map>`头文件内,它允许用户以键值对的形式组织数据,并且支持高效地查找、插入和删除操作。 **1. map的基本概念** `map`容器内部使用红黑树(Red-Black Tree)数据结构实现,这保证了其插入、删除和查找操作的时间复杂度为O(log N)。这意味着即使在大量数据中,`map`也能快速定位到特定元素。在`map`中,每个元素都是一个键值对,其中键是唯一的,用于查找,而值则与键相关联,可以是任意类型。 **2. map的功能** - **键值对应**:`map`会自动为每个键分配一个唯一的值,键和值的类型可以自定义。 - **快速查找**:通过键值查找记录,查找效率高,时间复杂度为O(log N)。 - **快速插入与删除**:能够高效地插入新的键值对或删除已存在的键值对。 - **修改值记录**:可以随时根据键找到对应的值并进行修改。 - **遍历所有记录**:可以通过迭代器遍历整个`map`,访问每个键值对。 **3. map的使用** 创建`map`时,需要指定键和值的类型,如`std::map<int, string> personnel;`。此外,可以使用typedef简化类型声明,如`typedef map<int, CString> UDT_MAP_INT_CSTRING;`。 **4. 插入元素** 插入元素通常有两种方式:一是使用下标操作符`[]`,二是使用`insert()`函数。下标操作符在不存在键时会自动插入新元素,但可能造成不必要的默认构造和赋值操作。因此,推荐使用`insert()`来避免这种开销,例如`enumMap.insert(map<int, CString>::value_type(2, "Two"));` **5. 查找元素** 可以通过`find()`函数查找键值,返回一个迭代器,指向找到的键值对或者`end()`迭代器(表示未找到)。同时,`count()`函数可以用来检查键是否存在。例如: ```cpp int nFindKey = 2; UDT_MAP_INT_CSTRING::iterator it = enumMap.find(nFindKey); if (it == enumMap.end()) { // 没找到 } else { // 找到 } ``` **6. 删除元素** 使用`erase()`函数可以删除特定键值对或一个范围内的键值对。如`enumMap.erase(it)`删除迭代器指向的元素,`enumMap.erase(key)`删除指定键的元素,`enumMap.erase(enumMap.begin(), enumMap.end())`清空整个`map`。 **示例代码** ```cpp #include <map> #include <string> #include <iostream> void map_insert(map<string, string> *mapStudent, string index, string x) { mapStudent->insert(map<string, string>::value_type(index, x)); } int main() { map<string, string> studentMap; map_insert(&studentMap, "Alice", "Computer Science"); map_insert(&studentMap, "Bob", "Mathematics"); map<string, string>::iterator it = studentMap.find("Alice"); if (it != studentMap.end()) { cout << "Alice studies " << it->second << endl; } studentMap.erase("Alice"); return 0; } ``` 以上代码展示了如何插入、查找和删除`map`中的元素。 总结,C++中的`map`是编程中非常实用的数据结构,它提供了高效的键值对管理,适用于需要快速查找和关联数据的场景。理解和熟练使用`map`可以帮助开发者编写更加高效和简洁的代码。