C++ 关联容器
什么是关联容器?
关联容器是C++ STL(标准模板库)中的一类重要容器,与顺序容器不同,关联容器中的元素是通过键(key)来组织和访问的,而不是通过位置。关联容器在内部通常使用红黑树等平衡树结构实现,这使得它们在查找、插入和删除操作上具有较高的效率(通常为对数时间复杂度)。
C++ STL提供了四种基本的关联容器:
set
:存储唯一键的集合,按照键排序map
:存储键-值对的集合,按照键排序,键唯一multiset
:允许重复键的集合,按照键排序multimap
:允许重复键的键-值对集合,按照键排序
备注
C++11之后,还引入了基于哈希表实现的无序关联容器:unordered_set
、unordered_map
、unordered_multiset
和unordered_multimap
,它们提供了平均常 数时间复杂度的操作。本文将重点介绍基于平衡树的关联容器。
set容器
set
是一个只包含唯一键的集合,它按照键的值自动排序。
基本操作
#include <iostream>
#include <set>
int main() {
// 创建一个set容器
std::set<int> numbers;
// 插入元素
numbers.insert(30);
numbers.insert(10);
numbers.insert(20);
numbers.insert(10); // 重复元素不会被插入
// 遍历输出set中的元素
std::cout << "Set elements: ";
for(const auto& num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 检查元素是否存在
if(numbers.find(10) != numbers.end()) {
std::cout << "Element 10 found in the set" << std::endl;
}
// 删除元素
numbers.erase(20);
// 再次遍历
std::cout << "After erasing 20: ";
for(const auto& num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 获取set的大小
std::cout << "Size of set: " << numbers.size() << std::endl;
return 0;
}
输出结果:
Set elements: 10 20 30
Element 10 found in the set
After erasing 20: 10 30
Size of set: 2
重要成员函数
insert(val)
:插入元素erase(val)
:删除指定值的元素find(val)
:查找元素,返回迭代器count(val)
:返回指定值元素的数量(对于set通常为0或1)clear()
:清空容器size()
:返回容器中元素的数量empty()
:检查容器是否为空
map容器
map