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精品网络服务器。拒绝绕路,拒绝不稳定。