C++标准模板库(STL)的map是一种关联容器,它存储的元素是键值对,键唯一,值可以重复。map的内部实现是一种平衡二叉搜索树(红黑树),这使得它的查找、插入、删除操作的时间复杂度都是O(log n)。

map的主要优点是,它能够快速地根据键查找对应的值。这是因为map的内部实现保证了元素始终是排序的,因此可以使用二分查找算法。这与其他的顺序容器(如vector和list)不同,它们的查找操作的时间复杂度是O(n)。

你可以使用map的insert成员函数来插入元素。insert函数的参数是一个std::pair对象,其中第一个元素是键,第二个元素是值。例如:

std::map<int, std::string> m;
m.insert(std::make_pair(1, "one"));

如果你试图插入一个已经存在的键,map不会替换旧的值,而是忽略新的插入。如果你想要替换一个已经存在的键的值,你可以使用下标操作符[]。例如:

m[1] = "uno";

你也可以使用下标操作符[]来插入新的键值对。如果键不存在,map会创建一个新的键值对,值是该类型的默认值。然后返回对应的值的引用,你可以使用这个引用来修改值。例如:

m[2] = "two";

你可以使用find成员函数来查找一个键。find函数的参数是一个键,如果找到,它返回一个指向键值对的迭代器。如果没找到,它返回map::end。例如:

auto it = m.find(1);
if (it != m.end()) {
    std::cout << it->second << std::endl;
}

你可以使用erase成员函数来删除一个键。erase函数的参数是一个键或一个指向键值对的迭代器。例如:

m.erase(1);

你可以使用begin和end成员函数来获取指向map首元素和尾元素后一位置的迭代器,然后使用这些迭代器来遍历map。例如:

for (auto it = m.begin(); it != m.end(); ++it) {
    std::cout << it->first << ": " << it->second << std::endl;
}

或者使用C++11引入的范围for循环:

for (const auto& p : m) {
    std::cout << p.first << ": " << p.second << std::endl;
}

总的来说,map是一个非常强大的数据结构,它提供了快速查找的能力,同时也支持高效的插入和删除操作。这使得它在许多情况下都是理想的选择,特别是当你需要根据键快速查找值的时候。


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏